Activity總結(jié)

Activity生命周期

Activity生命周期圖示

BACK鍵:

當(dāng)我們按Back鍵時(shí),我們這個(gè)應(yīng)用程序?qū)⒔Y(jié)束,這時(shí)候?qū)⑾群笳{(diào)用onPause()->onStop()->onDestory()三個(gè)方法。
再次啟動(dòng)App時(shí),會執(zhí)行onCreate()->onStart()->onResume()

HOME鍵:

當(dāng)我們按HOME的時(shí)候,Activity先后執(zhí)行了onPause()->onStop()這兩個(gè)方法,
這時(shí)候應(yīng)用程序并沒有銷毀。而當(dāng)我們從桌面再次啟動(dòng)應(yīng)用程序時(shí),則先后分別執(zhí)行了onRestart()->onStart()->onResume()三個(gè)方法
注意:當(dāng)Activity在后臺時(shí)候,如果系統(tǒng)內(nèi)存不夠用,后臺的Activity很有可能會被強(qiáng)制銷毀回收內(nèi)存的,那么一定會觸發(fā)onSaveInstanceState(Bundle outState) 方法,我們可以把想保存的數(shù)據(jù)保存在 outState對象里,等Activity被重新創(chuàng)建執(zhí)行onCreate(Bundle saveInstanceState) 從參數(shù)saveInstanceState再讀取保存的數(shù)據(jù)

ActivityA 打開 ActivityB

Paste_Image.png

根據(jù)上圖 可以看出,正常情況下依次是

  • A:onPause()
  • B:onCreate()
  • B:onStart()
  • B:onResume()
  • A:onStop()

但是,如果ActivityB的樣式是Dialog樣式,B沒有完全遮擋A,ActivityB的生命周期跟剛才一樣,但是ActivityA并沒有執(zhí)行onStop()

從ActivityB 返回 ActivityA

接著上面的,如果在處于ActivityB 界面按下back鍵,返回 ActivityA,生命周期如下:

Paste_Image.png

依次會執(zhí)行:

  • B:onPause()
  • A:onRestart()
  • A:onStart()
  • A:onResume()
  • B:onStop()
  • B:onDestory()

Activity啟動(dòng)模式

  1. Standard模式(默認(rèn))
    每次開啟,都會在任務(wù)棧中創(chuàng)建新的Activity實(shí)例
  2. SingleTop模式
    如果當(dāng)前待開啟的Activity正好位于棧頂,就復(fù)用,否則在任務(wù)棧中創(chuàng)建新的Activity實(shí)例
  3. SingleTask模式
    如果當(dāng)前待開啟的Activity已經(jīng)存在,無論在棧中任何位置,都會將此位置上面的Activity全部移除,然后復(fù)用該Activity
  4. SingleInstance模式
    一個(gè)任務(wù)棧中只有一個(gè)Activity,并保證不再有其他

onNewIntent

當(dāng)Activity不是Standard模式,并且被復(fù)用的時(shí)候,會觸發(fā)onNewIntent(Intent intent) 這個(gè)方法,一般用來獲取新的Intent傳遞的數(shù)據(jù)

我們一般會把MainAcitivy設(shè)置為SingleTask,除了保證MainActivity的唯一,還可以利用singleTask的特性做一些清理工作。自動(dòng)管理?xiàng)?,銷毀無用的Acitivity.

Intent Flags

記住一點(diǎn):Activity都是運(yùn)行在任務(wù)棧里面,但如果要從廣播接受者BordercastReceiver或者服務(wù)Service去啟動(dòng)一個(gè)Activity,必須為當(dāng)前Activity創(chuàng)建一個(gè)新的任務(wù)棧才能正常顯示

public class MyReceiver extends BroadcastReceiver{
   public void onReceive(Context context, Intent intent) {
      Intent intent=new Intent(context,DemoActivity.class);
      intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//創(chuàng)建新的任務(wù)棧
      context.startActivity(intent);
 }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)載注明出處:http://www.itdecent.cn/p/c2c2ee4eb48a 1. 簡介 本篇不針對于...
    王三的貓阿德閱讀 2,723評論 2 5
  • Activity概述 Activity 是一個(gè)應(yīng)用組件。用戶可與提供的屏幕進(jìn)行交互。 每個(gè) Activity 都會...
    媚竹風(fēng)閱讀 589評論 0 0
  • 這是我第三遍看《Android開發(fā)藝術(shù)探索》這本書了,從第一遍看的云里霧里,第二遍略微明白之后,我決定看第三遍,并...
    陳添閱讀 970評論 2 8
  • 我這叫善良還是什么? 自己也不清楚 完全控制不了自己 很感恩很佩服自己上次期末考試和教資面試在一起卻堅(jiān)持著 平生第...
    考研狗的成長日記閱讀 269評論 0 0
  • 噼里啪啦下個(gè)不停的雨終于過去啦。妖魔鬼怪們簡直開心的不得了,更何況隨著晴朗天氣到來的是最好玩的合法捉弄人的日子——...
    大酉閱讀 438評論 0 1

友情鏈接更多精彩內(nèi)容