- 如果不知道提升的方向,那就回爐重造一次,或許就是一種提升。
1. Activity生命周期
Activity的生命周期通常情況下分為兩種。第一種就是正常情況下的生命周期,就是我們平時做了解到的onCreate(),onStart()等等。第二種生命周期就是異常情況下的生命周期,異常情況下的生命周期包含系統(tǒng)回收,異常崩潰下的生命周期。
正常情況下的生命周期:
- onCreate() 加載布局界面 初始化資源
- onRestart() Activity由不可見到可見 此生命周期方法主要是用戶行為導(dǎo)致 Home鍵或者新Activity的back。
- onStart() Activity正在啟動 即將開始 但是此時前臺不可見 無法進(jìn)行交互操作
- onResume() 可見 顯示在前臺
- onPause() 正在停止
- onStop() 即將停止
- onDestory() 銷毀回調(diào) 資源回收
需要注意的是在onPause()和onStop()方法中均不可以進(jìn)行耗時的操作,尤其是onPause()方法,因為onPasue()方法執(zhí)行結(jié)束之后新Activity的onResume()才會執(zhí)行,所以不要在onPause()方法中進(jìn)行耗時的操作,否則會影響新打開Activity的速度。
以上有幾個生命周期很有意思,比如: onStart()和onResume(),onPause()和onStop()。從描述上來看大致是差不多的,其實在用法上也大致差不多。那既然這樣,為什么官方還是把它分開了,其實有一個很明顯的區(qū)別:onStart()和onStop()是從Activity可見這個狀況下進(jìn)行回調(diào),而onResume()和onPause是從是否位于前臺的角度來進(jìn)行回調(diào)。
異常情況下的生命周期:
在當(dāng)前Activity異常終止情況下,系統(tǒng)會調(diào)用onSaveInstanceState()來保存當(dāng)前的Activity狀態(tài),然后調(diào)用onRestoreInstanceState()來恢復(fù)。
2. Activity的啟動模式和標(biāo)志位
四種啟動模式:
- standard 系統(tǒng)默認(rèn) 每次都會創(chuàng)建 不管是否存在
- singleTop 棧頂復(fù)用模式 如果Activity位于棧頂 不會被重新創(chuàng)建 生命周期方法都不會調(diào)用 但是會調(diào)用- onNewIntent()函數(shù)
- singleTask 棧內(nèi)復(fù)用模式 一個棧中存在 就不會被重新創(chuàng)建 同樣調(diào)用onNewIntent()函數(shù) 這里需要注意的是:默認(rèn)有clearTop()的效果
- singleInstance 單實例模式 創(chuàng)建單獨(dú)的任務(wù)棧 后期不會再創(chuàng)建 除非被銷毀
標(biāo)志位:
標(biāo)志位即我們所設(shè)置的Flag,其實相當(dāng)于給Activity設(shè)置了啟動模式;
比如:FLAG_ACTIVITY_NEW_TASK 相當(dāng)于singleTask的啟動模式
3. IntentFilter匹配規(guī)則
我們都只到啟動Activity的方式分為兩種,第一種就是顯示的調(diào)用Activity,那么就要明確匹配包名和類名;第二種方式就是隱式的去調(diào)用,就需要通過IntentFilter來過濾信息:
action: 字符串匹配 Intent信息必須一樣
category: 字符串 Intent信息包含關(guān)系
data:(mimeType和URL)文件類型及訪問的URL
注:Activity的隱式調(diào)用,要先判定此Activity是否存在,不然會報錯,可以通過PackageManager的resolveActivity()或者Intent的resolveActivity()來判斷。