Activity生命周期回调小结

1.首先在ActivityThread的主线程,生成一个ApplicationThread对象,这个对象式能够对外提供远程服务的,换句话说别的进程可以通过这个对象的本地代理与我这个ActivityThread的主线程(ApplicationThread对象)通信;


2.获取系统服务ActivityManager的本地代理对象


3.将生成的ApplicationThread对象通过ActivityManager的本地代理对象“发送”给系统服务ActivityManager,这样系统服务ActivityManager会"生成"ApplicationThread对象的本地代理,到此主线程与系统服务ActivityManager之间的“双工”通信信道就建立了


4.当你想要启动一个Activity的时候,系统服务ActivityManager就会调用ApplicationThread对象的本地代理的scheduleLaunchActivity方法,这样主线程的scheduleLaunchActivity也会相应的被调用,至此开始了Activity生命周期函数的回调。


代码较多,下面由我给大家再次简单总结下:


Activity 的启动,实际上是一个进程间交互的过程,即本地app 与 AMS 交互,涉及到两点:


  1. 本地app -> AMS : 给 AMS 各种参数,要求启动 Activity

  2. AMS -> 本地app : AMS处理完了,回调本地 app Activity 生命周期


可以看到这两个进程间相互通信,那么就找 Binder 就好了,从app -> AMS,这个比较简单,通过 ServiceManager.getService 拿到 AMS 的代理对象(Binder)即可和 AMS 通信。


而 AMS -> app 则如上文所说,我们在 ActivityThread 中创建了一个 ApplicationThread (Binder) 对象传递给 AMS 的。

猜你喜欢

转载自blog.csdn.net/qq_32671919/article/details/81028256