目錄
1.生命周期
2.啟動模式
3.Activity任務(wù)棧(管理Activity)
4.Activity四種狀態(tài)
5.Android進(jìn)程優(yōu)先級
6.scheme跳轉(zhuǎn)協(xié)議
1.生命周期
在谷歌官方文檔中,這樣說道每個方法的作用:
onCreate
在activity正常生命周期的情況下经瓷,創(chuàng)建的時候執(zhí)行一次且是第一次創(chuàng)建時調(diào)用妈经,此后,都不再執(zhí)行,鑒于這種情況,在activity生命周期內(nèi),只需要初始化一次的變量。
例如:這里應(yīng)該完成所有靜態(tài)資源的建立, 比如使用setContentView(int)和布局資源定義你的UI視圖, 使用findViewById(int)取出程序中需要交互的控件, 綁定數(shù)據(jù).
此時視圖還不存在,無法調(diào)用動畫等.
還有需要注意, 每次activity啟動, 不一定都會調(diào)用這個函數(shù). 當(dāng)當(dāng)前activity只是被覆蓋一部分, 當(dāng)前activity再次可交互時,是只調(diào)用onResume方法, 不會調(diào)用onCreate方法.
onStart
可以在onStart中檢測一些必要的初始化條件。
- 例如檢查gps是否可用界睁。如不可用,可以提示用戶設(shè)置兵拢。離開返回時翻斟,必定還會調(diào)用onStart,可以再做檢測卵佛。
onResume
打開獨占設(shè)備,如相機,在onPause中釋放.
onPause
- onPause是釋放資源的最佳時機
- 如果當(dāng)前activity擁有獨占資源(比如相機), 必須在這里釋放, 以免在下一個activity中需要用到
- onPause方法的執(zhí)行時間會直接影響下一個Activity的啟動流暢度
- onPause執(zhí)行有一定的時間限制(500ms)
底層執(zhí)行Activity 的onPause()時杨赤,有一定的時間限制的,當(dāng)ActivityManagerService通知應(yīng)用進(jìn)程暫停指定的Activity時截汪,如果對應(yīng)的onPause()在500ms內(nèi)還沒有執(zhí)行完疾牲,ActivityManagerService就會強制關(guān)閉這個Activity。如下就是對應(yīng)的onPause()執(zhí)行超時常量定義:
// How long we wait until giving up on the last activity to pause.
//This is short because it directly impacts the responsiveness of startingthe
// next activity.
static final int PAUSE_TIMEOUT = 500; // 定義在ActivityStack.java中
onStop
在onStop中衙解,可以執(zhí)行一些稍微重量一點的任務(wù)阳柔。
請注意: 在內(nèi)存不足而導(dǎo)致系統(tǒng)無法保留此進(jìn)程的情況下, onStop() 可能不會被執(zhí)行。
onDestroy
在onDestory中可以釋放一些變量蚓峦,特別是在onCreate中初始化舌剂,存在在整個生命周期內(nèi)的變量,例如bitmap的回收
onRestart
重新啟動activity時調(diào)用暑椰。該活動仍在棧中霍转,而不是啟動新的活動。onRestart事件后會跳過窗體的onCreate事件直接執(zhí)行onStart事件一汽。
onPostCreate——Activity徹底運行起來之后的回調(diào)
注意
- 幾乎所有Activity的子類,都會實現(xiàn)onCreate和onPause這兩個方法.
參考資料
- Activity生命周期詳解
- Android 生命周期中每個函數(shù)適合處理的事件
- Android Activity為什么要細(xì)化出onCreate避消、onStart、onResume召夹、onPause岩喷、onStop、onDesdroy這么多方法讓應(yīng)用去重載监憎?
- android activity 應(yīng)該知道的一切(完整篇)
2.啟動模式
- standard
- singletop
- singletask
- singleinstance
參考資料
3.Activity任務(wù)棧
- 先進(jìn)后出
4.Activity四種狀態(tài)
running / paused / stopped / killed
- runing
用戶可以點擊纱意,activity處于棧頂狀態(tài)。 - paused
activity失去焦點的時候鲸阔,被一個非全屏的activity占據(jù)或者被一個透明的activity覆蓋偷霉,這個狀態(tài)的activity并沒有銷毀迄委,它所有的狀態(tài)信息和成員變量仍然存在,只是不能夠被點擊腾它。(除了內(nèi)存緊張的情況跑筝,這個activity有可能被回收) - stopped
activity失去焦點的時候死讹,被一個非全屏的activity占據(jù)或者被一個透明的activity覆蓋瞒滴,這個狀態(tài)的activity并沒有銷毀,它所有的狀態(tài)信息和成員變量仍然存在赞警,只是不能夠被點擊妓忍。(除了內(nèi)存緊張的情況,這個activity有可能被回收) - killed
這個activity已經(jīng)被銷毀愧旦,其所有的狀態(tài)信息和成員變量已經(jīng)不存在了世剖。
5.Android進(jìn)程優(yōu)先級
前臺 / 可見 / 服務(wù) / 后臺 / 空
1. 前臺進(jìn)程:Foreground process
- 用戶正在交互的Activity(onResume())
- 當(dāng)某個Service綁定正在交互的Activity
- 被主動調(diào)用為前臺Service(startForeground())
- 組件正在執(zhí)行生命周期的回調(diào)(onCreate()、onStart()笤虫、onDestory())
- BroadcastReceiver正在執(zhí)行onReceive()
2. 可見進(jìn)程:Visible process
- 我們的Activity處在onPause()(沒有進(jìn)入onStop())
綁定到前臺Activity的Service
3. 服務(wù)進(jìn)程:Service process
- 簡單的startService()啟動旁瘫。
4. 后臺進(jìn)程:Background process
- 對用戶沒有直接影響的進(jìn)程 --- Activity處于onStop()的時候。
android:process=":xxx"
5. 空進(jìn)程:Empty process
- 不含有任何的活動的組件琼蚯。(Android設(shè)計的酬凳,處于緩存的目的,為了第二次啟動更快遭庶,采取的一個權(quán)衡)
6.scheme跳轉(zhuǎn)協(xié)議
Android中的scheme是一種頁面內(nèi)跳轉(zhuǎn)協(xié)議宁仔,通過定義自己的scheme協(xié)議,可以跳轉(zhuǎn)到app中的各個頁面
- 服務(wù)器可以定制化告訴app跳轉(zhuǎn)哪個頁面
- App可以通過跳轉(zhuǎn)到另一個App頁面
- 可以通過H5頁面跳轉(zhuǎn)頁面