Handler篇 3 - Looper 源码分析
基于 Android 7.1.1 源码,分析 Looper 的架构和原理。 1 成员变量1static final ThreadLocal<Looper> sThreadLocal = new ThreadLocal<Looper>(); 线程本地变量,用于保存每个线程创建出来的 Looper 对象! 1private static Looper sMainLooper; ...
阅读更多
Handler篇 2 - Handler 源码分析
基于 Android 7.1.1 源码,分析 handler 的架构和原理。 0 前言本片博客通过以下几个方面总结 Handler 源码的实现架构! 1 create HandlerHandler 提供了如下的构造器方法: 12345678910111213141516171819202122232425//【方法1】默认使用当前的线程的 Looper 对象创建 Handler,如果当前线程的没有 ...
阅读更多
Handler篇 1 - Handler 初识
基于 Android 7.1.1 源码,分析 handler 的架构和原理。 0 前言Android 中有 2 中常见的通信方式,进程间的通信使用 Binder,而线程间的通信则使用 Handler,该系列文章就来总结下和 Handler 相关的知识点! 1 创建 Handler我们知道,每一个 Handler 都要和一个 Thread 的 Looper 对象相关联,一个线程可以有多个 Handl ...
阅读更多
UsageStats 第 1 篇 - UsageStatsService 的启动
[toc] 基于 Android7.1.1 源码分析 UsageStatsService 的架构和原理! 0 综述启动 UsageStatsService 服务,是从 SystemServer.startCoreServices 开始!123456789private void startCoreServices() { mSystemServiceManager.startSer ...
阅读更多
Serivce 篇 8 - Service stopSelf 流程分析
本文基于 Android 7.1.1 源码分析,转载请说明出处! 0 综述对于 Service,我们除了可以调用 stopService 来停止服务,服务自身也可以调用 stopSelf 方法停止,下面我们来看看这几个方法!1234567891011121314151617181920212223242526public final void stopSelf() { stopSe ...
阅读更多
Serivce 篇 7 - Service restart 流程分析
本文基于 Android 7.1.1 源码分析,转载请说明出处! 0 综述当服务被 kill 掉后,会根据 onStartCommand 方法的返回值,来决定是否对服务进行重启,我们先来回顾下返回值类型: START_STICKY: START_STICKY_COMPATIBILITY: 删除本次启动的 startId 对应的启动项; 设置服务的 stopIfKilled 为 false; ...
阅读更多
BroadcastReceiver篇 7 - BroadcastReceiver 广播机制总结
基于 Android 7.1.1 分析 BroadcastReceiver 组件的机制,本文为作者原创,转载请说明出处! 0 综述本篇文章总结一下广播和广播接收者相关的知识点,广播是 Android 组件间的通信方式,本质上是 Intent 意图,可用于以下场景: 同一应用内部的同一进程间; 同一应用内部的不同进程间的不同组件的通信; 1 广播的使用Android 系统的广播,本质上就是 In ...
阅读更多
Serivce 篇 6 - startForeground 和 stopForeground 分析
本文基于 Android 7.1.1 源码分析,转载请说明出处! 0 综述我们可以通过 startForeground 方法来将一个服务设置成前台服务,具体的使用如下:123456789101112131415161718192021222324252627private void initNotification(Context context) { Notification.B ...
阅读更多
BroadcastReceiver篇 6 - LocalBroadcastManager 分析
[toc] 本文基于 Android 7.1.1 源码,分析 LocalBroadcastManager 机制! 0 前言BroadcastReceiver 是基于 Binder 通信的,其可以用于跨进程的通信,而 LocalBroadcastManager 是基于 Handler 的,其适用于进程内的通信,在进程内进行局部广播发送与注册。 相比 BroadcastReceiver 的广播,Loc ...
阅读更多
Serivce 篇 5 - unbindService 流程分析
本文基于 Android 7.1.1 源码分析,转载请说明出处! 0 综述我们通过 bindService 绑定的服务,需要通过 unbindService 来解除绑定: 1context.unbindService(conn); 以前我们只是会调用,但是其底层的调用到底是什么样的呢?知其然知其所以然,今天我们就来学习下 unbindService 的过程! 1 发起端进程1.1 ContextW ...
阅读更多