网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
生命周期流程图
拓展问题:
1.onStart和onResume,onPause和onStop有什么实质上的不同?
onStart 和 onStop 是从 Activity 是否可见角度来回调的,而 onResume 和 onPause 是从Activity是否位于前台来回调的。
2.A 启动 B,那么 B 的 onResume 和 A 的 onPause 哪个先执行?
结论:A 先执行
onPause()
方法,紧接着 B 执行onCreate() -> onSatar() -> onResume()
方法,接着执行 A的onStop()
原因:
启动 Activity 的请求有
Instrumentation
通过 Binder 接口向 AMS 发送请求,AMS 内部维护着一个 ActivityStack 并负责栈内 Activity 的状态同步,接着AMS
通过IApplicationThread
( 位于当前应用进程内) 的 Binder 接口去同步 Activity 的状态从而完成生命周期方法的调用。调用 ApplicationThread.scheduleLaunchActivity 通过 handle.sendMessage 通知 ActivityThread 完成新Activity 的 onCreate,onStart,onResume的调用过程。
ActivtyStack.resumeTopActivityInnerLocked();//
---TaskDisplayArea.pauseBackStacks();//暂停所有堆栈或仅后堆栈中的所有活动
----ActivtyStack.startPausingLocked();//开始暂停当前处于 resumed 的活动
------ActivityStackSupervisor.realStartActivityLocked();
.... app 进程
ActivtyThread.handleLaunchActivity(){
----ActivtyThread.performLaunchActivity();
----1.ContextImpl appContext = createBaseContextForActivity(r);//创建该 context实现类
----2.mInstrumentation.newActivity();//通过appContext类加载器反射创建Activity
----3.LoadedApk.makeApplication();//创建application
----4.appContext与activity相关联
----5.执行activity.attach()方法。
----6.mInstrumentation.callActivityOnCreate();//执行oncreate方法
2. 异常情况下的生命周期:
1.系统配置发生改变导致Activity被杀死并重新创建
异常终止:点击了返回键 ,锁屏 ,点击 Home 键 ,有其它 APP 进入前台(比如接听电话) ,启动了新的Activity ,屏幕方向发生旋转 ,APP被杀死。
总之:系统只在 Acitivity 被异常终止的时候才会触发
onSaveInstanceState
和onRestor