Activity生命周期的执行与系统进程中的ActivityManagerService密切相关,同时也与相关应用进程联系,这就涉及到进程(线程)间通信问题。system_server是系统进程,是java framework的核心载体,其中运行着大量的系统服务,比如ApplicationThreadProxy(ATP)、ActivityManagerService(AMS),这个两个服务都运行在system_server进程的不同线程中,由于ATP和AMS都是基于IBinder接口,都是binder线程,binder线程的创建与销毁都是由binder驱动来决定的。
APP进程是应用进程,主线程主要负责Activity/Service等组件的生命周期以及UI相关操作; 另外,每个App进程中至少会有两个binder线程 ApplicationThread(AT)和 ActivityManagerProxy(AMP)。
Binder用于不同进程间通信,由一个进程的binder客户端向另一个进程的服务端发送事件;Handler用于不同线程间通信。
暂停Activity事件:
线程1中的AMS调用线程2中的ATP来向线程4发送暂停事件(同一进程的线程间共享存储空间,可以直接相互调用);
线程2通过Binder向线程4发送暂停Activity事件;
线程4通过Handler向同进程中的主线程ActivityThread发送暂停Acitvity事件;
主线程在looper.loop()中循环遍历消息,当收到暂停Activity的消息(PAUSE_ACTIVITY)时,便将消息分发给ActivityThread.H.handleMessage()方法,再经过方法的层层调用,最后便会调用到Activity.onPause()方法。
Activity的生命周期,都是其他线程通过handler发送消息给主线程,主线程中的ActivityThread的内部类H控制整个核心消息处理机制,通过H.handleMessage()来控制Activity的生命周期。一般来说主线程收到消息,都会调用相应handlexxx方法,比如,LAUNCH_ACTIVITY则对应handleLaunchActivity,RESUME_ACTIVITY则对应handleResumeActivity等。
由于ATP和AMS都是基于IBinder接口,都是binder线程,binder线程的创建与销毁都是由binder驱动来决定的,每个进程binder线程个数的上限为16。