看startActivity源码学到的东西

我们简单的写一句如下代码启动Activity

    Intent intent = new Intent(this, LinearLayoutActivity.class);
    startActivity(intent);

你是不是有很多疑问?

  1. LinearLayoutActivity这个对象在哪里被new出来呢
  2. 它们两个的生命周期是怎么进行的呢
  3. 怎么样推到前台的呢

详细源码分析去看大佬的这篇博客:
https://blog.csdn.net/qq_35559358/article/details/75668416

学到的东西

1、startActivity内部也是通过调用startActivityForResult来启动Activity,只不过传递的requestCode小于0
2、启动一个Activity是需要系统进程(ActivityManagerService)和应用进程(ActivityThread)互相协助完成的
3、要启动的Activity看是否它所需的进程是否存在,如果不存在则ActivityManagerService会通过socket与Zygote继承通讯,并告知Zygote进程fork出一个新的应用程序进程,然后执行ActivityThread的main方法
4、进程准备好了,startActivity后会通知ActivityManagerService做一些数据的保存初始化等处理,ActivityManagerService就会通知ActivityThread我准备好了,你开始启动activity吧,然后你会发现在performLaunchActivity方法中通过反射生成了要跳转的对象(回答了疑问1)
5、ActivityThread每走完一个生命周期就会通知ActivityManagerService做些处理,或者知道你现在走到那一步了,我好协助。如走完了onResume,ActivityManagerService就会把界面推到前台,并且用户可以操作。
6、如a启动b, a走onPause,然后b走onCreate onStart方,onResume方法,然后a走onStop
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章