天天看點

Android四大元件—Activity詳解一、Activity介紹二、Activity的生命周期三、儲存 Activity 狀态四、Activity 的啟動模式

一、Activity介紹

Activity是Android的四大元件之一,它提供螢幕,使用者通過它與機器産生互動。

二、Activity的生命周期

Android四大元件—Activity詳解一、Activity介紹二、Activity的生命周期三、儲存 Activity 狀态四、Activity 的啟動模式

onresume 與 onstart 的差別

onStart 使用者可見,但還沒有獲得焦點,使用者還不能進行操作。

onResume 界面可見,并獲得焦點,使用者可以進行操作了。

Activity A 啟動 Activity B 時的操作列印

Activity_A onPause()...... 

Activity_B onCreate()...... Activity_B onStart()...... Activity_B onResume()...... 

Activity_A onStop()......  

三、儲存 Activity 狀态

  • Activity 處于 paused, stopped 時依然存在記憶體中,所有的資料及狀态都存在,是以當被恢複時依然保持退出時的狀态。
  • 但處于 paused, stopped 狀态的 Activity 可能會被系統殺掉,進而使用者重新打開時,與當時提出時不一樣了。為了保證能夠還原現場,則需要實作 onSaveInstanceState() 回調方法。
  • 系統在 Activity 被銷毀之前調用 onSaveInstance() ,通過将需要記住的狀态通過鍵值對的形式儲存到 Bundle 參數中。當應用程式被系統殺死,并再次被啟動時,會将儲存的 Bundle 傳遞到 onCreate() 和 onRestoreInstanceState() 。從這些方法的 Bundle 參數中,就可以擷取到 Activity 被銷毀前的狀态,并據此恢複 Activity。

四、Activity 的啟動模式

靜态設定啟動模式

在Manifest中設定的(通過launchMode屬性設定),這個被稱為靜态設定。

  • standard 預設啟動模式,會預設建立一個新的執行個體,是以,在這種模式下,可以有多個相同的執行個體,也允許多個相同Activity疊加。
  • singleTop  棧頂複用模式,可以有多個執行個體,但是不允許多個相同Activity疊加。如果Activity在棧頂的時候,啟動相同的Activity,不會建立新的執行個體,而會調用其onNewIntent方法。應用場景:開啟管道多,适合多應用開啟調用的Activity。
  • singleTask 棧内複用模式,隻有一個執行個體。在同一個應用程式中啟動他的時候,若Activity不存在,則會在目前task建立一個新的執行個體,若存在,則會把task中在其之上的其它Activity destory掉并調用它的onNewIntent方法。應用場景:程式主界面,我們肯定不希望主界面被多建立,而且在主界面退出的時候退出整個App是最好的設想。
  • singleInstance 全局唯一模式,會為目标Activity配置設定一個新的affinity,并建立一個新的Task棧,将目标Activity放入新的Task,并讓目标Activity獲得焦點。新的Task有且隻有這一個Activity執行個體。如果已經建立過目标Activity執行個體,則不會建立新的Task,而是将以前建立過的Activity喚醒

動态設定啟動模式

動态在java代碼設定,如果同時有動态和靜态設定,那麼動态的優先級更高。

  • FLAG_ACTIVITY_SINGLE_TOP 與靜态設定中的singleTop效果相同
  • FLAG_ACTIVITY_CLEAR_TOP 與singleTask很像,不同的是此flag會銷毀已存在的目标執行個體,再重新建立。當_CLEAR_TOP和_SINGLE_TOP同時設定的情況下,就是singleTask模式。
  • FLAG_ACTIVITY_NEW_TASK 與singleInstance很相似,但與singleInstance有不同,1、新的Task沒有說隻能存放一個目标Activity。隻是說決定是否建立一個Task。而singleInstance模式下新的Task隻能放置一個目标Activity。2、在同一應用下,如果Activity都是預設的affinity,那麼此Flag無效。而singleInstance預設情況也會建立新的Task。