前言:从根Activity的启动流程出发,总结下应用层Activity在开发过程中常用到的知识;
还是以"Launcher中启动Settings"为例:
1.Launcher暂停
也就是ActivityThread.handlePauseActivity():
(1)是否由用户主动退出而导致暂停
onUserInteraction();
onUserLeaveHint();
(2)保存Activity状态
onSaveInstanceState();
(3)处理Fragment和Activity的暂停
mFragments.dispatchPause();
onPause();
2.Settings的ActivityThread创建
也就是ActivityThread.attach():
(1)Settings进程被创建后,先是ActivityThread.main():
①UI主线程的消息循环
Looper.prepareMainLooper();
Looper.loop();
②调用ActivityThread.attach()
ams.attachApplication();
3.Settings绑定application
也就是ActivityThread.ApplicationThread.bindApplication():
(1)进行应用程序级别的初始化操作
①创建并初始化应用程序,也就是ActivityThread的Context;
②创建并初始化Activity的Instrumentation;
③创建Application;
④Instrumentation.onCreate();
⑤Application.onCreate();
3.Settings的生命周期开始
(1)ActivityThread.ApplicationThread.handleLaunchActivity():
①创建并且初始化Activity所对应的Context;
②通过java反射创建Activity对象;
③Activity关联到Context;
④Fragments与Activity关联;
⑤创建Activity对应的Window,PhoneWindow;
⑥初始化mMainThread,mUiThread,mToken;
⑦PhoneWindow与WMS进行绑定;
⑧onCreate();
⑨mFragments.dispatchActivityCreated();
(2)ActivityTread.handleStartActivity():
①mFragments.execPendingActions();
②onStart();
③mFragments.dispatchStart();
④onRestoreInstanceState();
⑤onPostCreate();
⑥onTitleChanged()--->mActionBar.setWindowTitle();
(3)ActivityThread.ApplicationThread的handleResumeActivity():
①onStateNotSaved();
②mFragments.noteStateNotSaved();
③onNewIntent();
④onActivityResult(),onRequestPermissionsResult();
⑤如果当前Activity处于stop状态,依次调用Activity生命周期的onRestart和onStart方法;
⑥mFragments.execPendingActions();
⑦onResume();
⑧mFragments.dispatchResume();
mFragments.execPendingActions();
⑨onPostResume();
⑩设置根view,设置窗口类型,向WMS中添加activity窗口;
onConfigurationChanged();
4.Launcher stop
ActivityThread.ApplicationThread.handleStopActivity():
①在stop执行,必须要先强制执行pause,如果已经是pause了,就返回;
②onStop();
③设置根view不可见;
5.Launcher或者Settings的destory
ActivityThread.ApplicationThread.handleLaunchActivity():
①Destroy之前必须要先强制执行pause和stop,如果已经是pause和stop了,就返回;
②retainNonConfigurationInstances();
③onDestroy();
④wm.removeViewImmediate(v);