Android常見問題總結(一)
以下為一些常見的Android的總結:
1. Activity與Fragment的生命周期
Activity的生命周期如下圖所示:
Fragment生命周期如下圖所示:
2. Acitivty的四種啟動模式與特點
Android中的Activity由任務棧管理,當我們start一個新的Activity時,就往任務棧中新加入一個棧幀,而當我們finish一個Activity界面時,則往任務棧中移除一個棧幀。Activity具有四種啟動模式,我們可以在配置文件中通過修改launchMode修改,啟動模式分別是:standard、singleTop、singleTask和singleInstance
standard
standard為默認Activity的啟動模式。在standard啟動模式下,無論何時start一個Activity,系統都會往任務棧中加入一個新的棧幀。
singleTop
在singleTop啟動模式下,當我們start一個Activity時,系統會先去檢測任務棧棧頂的Activity和要啟動t的Activity是否相同。如果相同則不進行任何操作,否則往任務棧中加入一個新的棧幀。
singleTask
在singleTask啟動模式下,當我們start一個Activity時,系統會先去檢測任務棧中是否含有將要啟動的Activity。如果含有,則把該Activity所在棧幀的頂部的棧幀移除,使該Activity所在的棧幀處在棧頂,如果沒有,則新加入一個棧幀。
singleInstance
在singleInstance啟動模式下,當我們start一個新的Activity時,該Activity會在一個新的任務棧中啟動。
3. Service的生命周期,兩種啟動方法,有什么區別
Android中的Service組件可以通過startService和bindService兩種方法來啟動,其生命周期示意圖如下:
如果一個Service同時被調用了startService和bindService方法,那么它的生命周期就變成如下圖所示:
4. 怎么保證service不被殺死
要想使Service存活下來,我們就必須保證Service所在的進程不被殺掉,一般來說有以下方法:
- 在onStartCommand回調方法中返回START_STICKY,那么該進程被殺掉后系統會試圖重啟它
- 設置配置文件中application的persistent屬性,把應用提升為系統級別應用,免疫low memory killer
- 在Service的onDestroy方法中重啟該Service,不過如果進程被直接殺掉這種方法就無效了
- 通過監聽特殊的系統廣播(如屏幕變化、電量變化、網絡變化等)去不斷重啟Service
- 使用AlarmManager定時重復開啟Service
- 通過設置Service的process屬性,把Service放在子進程中,避免與主進程一起被回收
- 開啟一個另外的進程與Service進程互相監視,雙方要是有任意一方被殺掉則重啟