1. 程式人生 > >Android Activity 詳解

Android Activity 詳解

生命週期

這裡寫圖片描述
如上圖所示,Activity生命週期很簡單共七個生命週期函式,oncreate(),onrestart(),onstart(),onresume(),onpause(),onstop(),ondestroy();
下面舉兩個例子來說明Activity生命週期函式呼叫關係。A Activity 開啟 B Activity ,B佔滿螢幕,返回A。A Activity 開啟 C Activity,C未佔滿螢幕,返回A。
(1)、B佔滿螢幕,A獲取不到任何焦點

Action A Activity B Activity
Open A onCreate()=>onStart()=>onResume() -
Open B onPause()=>B=>onStop() onCreate()=>onStart()=>onResume()
Return A onRestart()=>onStart()=>onResume() onPause()=>A=>onStop()=>onDestroy()

(2)、B未佔滿螢幕,A還能獲取到焦點

Action A Activity B Activity
Open A onCreate()=>onStart()=>onResume() -
Open B onPause()=>B onCreate()=>onStart()=>onResume()
Return A onResume() onPause()=>A=>onStop()=>onDestroy()

啟動模式

Activity有四種啟動模式,分別是standard,singleTop,singleTask,singleInstance。這四種啟動模式將決定啟動一系列Activity後,後退棧內的Activity的結構。
1、standard (預設啟動模式)
這種啟動模式,每啟動一個Activity,便將這個Activity例項壓入棧位於棧的頂端。
這裡寫圖片描述
2、singleTop
這種模式,如果要啟動的Activity例項已經存在於棧的頂端,系統會呼叫onNewIntent()方法,而不是在例項化一個Activity物件。如果要啟動的Activity不在棧頂,則要重新建立。
這裡寫圖片描述
3、singleTask
這種模式,若要啟動的Activity在當前棧內,系統會呼叫onNewIntent()方法,而不是重新建立例項,此Activity上的其他例項都彈出棧,此Activity將位於棧頂。
這裡寫圖片描述
4、singleInstance
這種模式,如果應用1的任務棧中建立了MainActivity例項,如果應用2也要啟用MainActivity,則不需要建立,兩應用共享該Activity例項。
這裡寫圖片描述

關閉多個Activity

一、將Activity啟動模式修改為singleTask
將某個Activity啟動模式設定為singleTask模式,返回這個頁面時,系統會關閉這個Activity之上的所有Activity。
二、程式維護Activity集合
使用ListView或者Stack等,每次開啟新的Activity時,將引用存入到這個集合中,需要關閉的時候依次關閉Activity。
三、使用onActivityResult()遞迴關閉
在onActivityResult中接收上一個Activity的資料,關閉自身,再將資料傳遞下去。
四、通過BroadcastReceiver,關閉Activity
每個Activity中註冊廣播接收者,需要關閉應用的時候,傳送廣播,接收到廣播關閉自身。(PS:此方法慎用)