看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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容