Android 下拉通知欄時(shí)Activity的生命周期——重新理解onPause()

下拉通知欄時(shí)發(fā)生了什么

在某個(gè)APP中佃乘,發(fā)現(xiàn)下拉通知欄的時(shí)候,正在播放的視頻會(huì)暫停,于是有點(diǎn)好奇這段操作是不是在生命周期中實(shí)現(xiàn)的骂远。在網(wǎng)上眾多關(guān)于Activity生命周期的討論中,很多人認(rèn)為onPause()onStop()的區(qū)別就是“部分遮擋”和“全部遮擋”腰根,那按照這個(gè)猜測來分析一下這個(gè)過程:

首先激才,通知欄下拉一點(diǎn)點(diǎn),符合一般描述中“Activity被部分遮擋”——onPause()
然后额嘿,通知欄完全落下之后瘸恼,“Activity被全部遮擋”——onStop()

于是自己寫了一個(gè)實(shí)例來驗(yàn)證:

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.i(TAG, "onCreate");
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.i(TAG, "onStart");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.i(TAG, "onResume");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.i(TAG, "onPause");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.i(TAG, "onStop");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.i(TAG, "onDestroy");
    }
}

啟動(dòng)APP時(shí),毫無疑問册养,調(diào)用了onCreate()onStart()onResume()东帅;
完全下拉通知欄,然后上拉通知欄球拦,發(fā)現(xiàn)沒有日志打印靠闭,說明下拉通知欄對(duì)Activity的生命周期沒有影響帐我。

其他的“部分遮擋”——AlertDialog、Toast

經(jīng)過測試不難發(fā)現(xiàn)愧膀,在Activity中彈出AlertDialog拦键、Toast時(shí),Activity的onPause()并沒有調(diào)用檩淋;筆者還嘗試在MIUI系統(tǒng)中喚醒小愛同學(xué)矿咕,發(fā)現(xiàn)onPause()仍然沒有被調(diào)用。
但是在以下特殊的情況下狼钮,onPause()會(huì)被調(diào)用:

  1. 自定義dialog繼承自Activity
  2. 新啟動(dòng)的Activity主題設(shè)置為 android:theme=@android:style/Theme.Dialog

重新理解onPause()

跑去看文檔發(fā)現(xiàn)了如下信息:

Method Description
onPause() Called when the system is about to start resuming a previous activity. This is typically used to commit unsaved changes to persistent data, stop animations and other things that may be consuming CPU, etc. Implementations of this method must be very quick because the next activity will not be resumed until this method returns.
Followed by either onResume() if the activity returns back to the front, or onStop() if it becomes invisible to the user.

發(fā)現(xiàn)了onPause()和Activity的奇妙聯(lián)系碳柱,就不難理解之前為什么沒有被調(diào)用的問題了。

查看AlertDialog和Toast的源碼熬芜,可以發(fā)現(xiàn)它們顯示的原理莲镣,都是通過WindowManager.addView()來顯示的。也就是說涎拉,AlertDialog和Toast可以看做是當(dāng)前Activity的一部分View瑞侮,當(dāng)然也不會(huì)對(duì)Activity的生命周期構(gòu)成影響。

因此鼓拧,onPause()是否調(diào)用的關(guān)鍵就是半火,是否有另一個(gè)Activity參與進(jìn)來了。
而網(wǎng)上流傳甚廣的onPause()onStop()調(diào)用中提到的“遮擋”季俩,應(yīng)該修正為“被Activity遮擋”

至于官方文檔中提到的钮糖,onPause()之后會(huì)調(diào)用onStop()或者onResume(),前者很好理解酌住,一般的退出店归、新啟動(dòng)一個(gè)全屏Activity、鎖屏酪我、返回HOME等操作都是這種情況消痛;至于后者,筆者能想到的情況就是都哭,彈出部分遮擋的Activity類型的對(duì)話框秩伞,然后按返回鍵。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末欺矫,一起剝皮案震驚了整個(gè)濱河市纱新,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌汇陆,老刑警劉巖怒炸,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異毡代,居然都是意外死亡阅羹,警方通過查閱死者的電腦和手機(jī)勺疼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來捏鱼,“玉大人执庐,你說我怎么就攤上這事〉及穑” “怎么了轨淌?”我有些...
    開封第一講書人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長看尼。 經(jīng)常有香客問我递鹉,道長,這世上最難降的妖魔是什么藏斩? 我笑而不...
    開封第一講書人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任躏结,我火速辦了婚禮,結(jié)果婚禮上狰域,老公的妹妹穿的比我還像新娘媳拴。我一直安慰自己,他們只是感情好兆览,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開白布屈溉。 她就那樣靜靜地躺著,像睡著了一般抬探。 火紅的嫁衣襯著肌膚如雪子巾。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,190評(píng)論 1 299
  • 那天驶睦,我揣著相機(jī)與錄音砰左,去河邊找鬼匿醒。 笑死场航,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的廉羔。 我是一名探鬼主播溉痢,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼憋他!你這毒婦竟也來了孩饼?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤竹挡,失蹤者是張志新(化名)和其女友劉穎镀娶,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體揪罕,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡梯码,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年宝泵,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片轩娶。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡儿奶,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鳄抒,到底是詐尸還是另有隱情闯捎,我是刑警寧澤,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布许溅,位于F島的核電站瓤鼻,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏贤重。R本人自食惡果不足惜娱仔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望游桩。 院中可真熱鬧牲迫,春花似錦、人聲如沸借卧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽铐刘。三九已至陪每,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間镰吵,已是汗流浹背檩禾。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留疤祭,地道東北人盼产。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像勺馆,于是被迫代替她去往敵國和親戏售。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)自Android四大基本組件介紹與生命周期Android四大基本組件分別是Activity草穆,Service服務(wù),...
    開子的私家地閱讀 1,414評(píng)論 0 5
  • 1.正常情況下的生命周期 1.onCreate: 與onDestory配對(duì)灌灾,表示Activity被創(chuàng)建,這是生命...
    S_ZY閱讀 697評(píng)論 0 6
  • 本系列出于AWeiLoveAndroid的分享悲柱,在此感謝锋喜,再結(jié)合自身經(jīng)驗(yàn)查漏補(bǔ)缺,完善答案豌鸡。以成系統(tǒng)嘿般。 Andro...
    濟(jì)公大將閱讀 1,823評(píng)論 2 10
  • Activity 在應(yīng)用中的表現(xiàn)主要是顯示各種UI元素轴总,并且為這些UI元素設(shè)置時(shí)間處理函數(shù),使得用用戶可以與這些U...
    sssssss_閱讀 684評(píng)論 0 1
  • 寶寶現(xiàn)在快十一個(gè)月了博个,活力十足怀樟,每天在奔一的道路上歡快地爬行著。而去年這個(gè)時(shí)候盆佣,我和老婆正在經(jīng)歷一段無比艱難的時(shí)光...
    青芝塢豬閱讀 485評(píng)論 0 5