1:應用程序的啟動過程
應用程序的圖標被點擊-》啟動activitythread-》線程的入口main函數-》創建activitythread-》綁定activitythread thread.attach(false,startSeq)-》創建儀表類生命周期,管理程序的生命進程mInstrumentation = new Instrumentation();-》創建上下文Context ContextImpl context = ContextImpl.createAppContext(this,getSystemContext().mPackageInfo);-》創建應用程序 mInitialApplication = context.mPackageInfo.makeApplication(true,null);-》回調application的onCreate方法
啟動Activity的流程:
ActivityThread->handleLaunchActivity->performLaunchActivity->創建activity的上下文createBaseContextForActivity->創建啟動的⻚面activity=mInstrumentation.newActivity(cl,component.getClassName(), r.intent);->將界面和window綁定activity.attach(appContext,getInstrumentation,window)->調用onCreate方法布局activity界面mInstrumentation.callActivityOnCreate(activity, r.state);->activity.performCreate(icicle);->onCreate(icicle);在Activity的子類中通過實現onCreate方法來對界面進行初始化(UI布局,邏輯初始化)什么是Context上下文ApplicationActivityService有上下文運行環境Context提供了訪問系統資源的方法可以理解為就是一個橋梁設備<->Context<->界面
:2:當從寫父類的方法時,是否需要調用父類的方法:當父類的實現是空的時,一般是不需要回調的,
如果父類有實現,通常需要使用super調用以下父類,
3:什么是上下文:Context
application activity service是有上下文,運行環境的,context提供了訪問系統資源的方法,可以作為一個設備與界面之間的橋梁
4:activity的各個時期所要調用的方法
onCreate()方法:
必須實現此回調,它會在系統創建 Activity 時觸發。實現應該初始化 Activity 的基本組
件:例如,在此處創建視圖並將數據綁定到列表。最重要的是,在此處調⽤setContentView() 來定義 Activity 界⾯的布局
onStart()方法:
onCreate() 退出后,Activity 將進⼊“已啟動”狀態,並對⽤戶可⻅。此回調包含 Activity 進⼊前台
與⽤戶進⾏互動之前的最后准備⼯作。
onResume()方法:
系統會在 Activity 開始與⽤戶互動之前調⽤此回調。此時,該 Activity 位於 Activity 堆棧的頂部,
並會捕獲所有⽤戶輸⼊。應⽤的⼤部分核⼼功能都是在 onResume() ⽅法中實現的。
onPause()方法:
當 Activity 失去焦點並進⼊“已暫停”狀態時,系統就會調⽤ onPause()。例如,當⽤戶點按“返回”
或“最近使⽤的應⽤”按鈕時,就會出現此狀態。當系統為您的 Activity 調⽤ onPause() 時,從技術
上來說,這意味着您的 Activity 仍然部分可⻅,但⼤多數情況下,這表明⽤戶正在離開該
Activity,該 Activity 很快將進⼊“已停⽌”或“已恢復”狀態。
如果⽤戶希望界⾯繼續更新,則處於“已暫停”狀態的 Activity 也可以繼續更新界⾯。例如,顯示導
航地圖屏幕或播放媒體播放器的 Activity 就屬於此類 Activity。即使此類 Activity 失去了焦點,⽤
戶仍希望其界⾯繼續更新。
onStop()方法:
當 Activity 對⽤戶不再可⻅時,系統會調⽤ onStop()。出現這種情況的原因可能是 Activity 被銷
毀,新的 Activity 啟動,或者現有的 Activity 正在進⼊“已恢復”狀態並覆蓋了已停⽌的 Activity。
在所有這些情況下,停⽌的 Activity 都將完全不再可⻅。
onRestart()方法:
當處於“已停⽌”狀態的 Activity 即將重啟時,系統就會調⽤此回調。onRestart() 會從 Activity 停
⽌時的狀態恢復 Activity。
此回調后⾯總是跟着 onStart()。
onDestroy()方法:
系統會在銷毀 Activity 之前調⽤此回調。
此回調是 Activity 接收的最后⼀個回調。通常,實現 onDestroy() 是為了確保在銷毀 Activity 或包
含該 Activity 的進程時釋放該 Activity 的所有資源。
5:不同操作時,activity周期變化
程序第一次啟動時:
oncreate->onstart->onResum
程序切換到后台時:
onpause->onstop
程序從后台切換回來時:
onRestart->onStart->onResum
如果當前界面是第一個界面,且按返回按鈕時進入桌面時:
onPause->onStop->onDestory
從當前界面切換到其他界面時:
onPause->onStop
從下一個頁面切換回來時:
onRestart->onStart->onResum
當由橫屏變為豎屏(或由豎屏變橫屏)時:
onPause->onStop->onDestory->onCreate->onStart->onResum
在界面被銷毀之前會調用
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
}
在界面被銷毀之前可以在該方法中存儲數據
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putString("lfl","要被銷毀了")
}
在onCreate方法中將數據取出
savedInstanceState?.getString("lfl")
用bundle存取數據
用lifecycle監聽生命周期:
一:從寫一個類,將數據放在該類里面
二:讓該類繼承與lifecycleobserver
class GaodeMap :LifecycleObserver{
//二:標記,當要什么時候調用就標記成什么時候,
//如init()要在create時就調用,則標記為on_create
//三:添加一個監聽器,需要在哪監聽該類就在哪加
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
fun init(){
Log.v("lfl","create方法")
}
//該方法會在onStart時調用
@OnLifecycleEvent(Lifecycle.Event.ON_START)
fun connect(){
Log.v("lfl","開始連接獲取用戶信息")
}
}
三:添加一個監聽器,哪個activity需要在各時期調用以上方法,便在哪個activity的類中添加
//添加的生命周期的監聽器,
lifecycle.addObserver(GaodeMap())//是需要一個lifecycleobserver參數,但是我們的類是繼承於lifecycleobserver,
所以只需要初始化一個該類
