在Android開發中經常會碰到當用戶通過菜單操作重新回到之前的某個Activity的時候,希望該Activity能回到之前的狀態,而不是重新創建一遍,比如常用的main Activity。這個時候就需要用到launchMode的單任務屬性了
在android中activity的管理是用堆棧的方式。當啟動一個新的activity時,此activity就被push到棧頂並獲得焦點,舊棧頂的activity仍然存在,但是已經stop。當用戶按下back鍵時,將棧頂的activity pop掉。此時新棧頂的activity resume。
單任務的activity如下方法進行創建
1、需要在Manifest.xml定義該Activity的launchmode,添加如下屬性
android:launchMode="singleTask"
launchMode包含4種值。
其中
standard為默認值,通常會在activity開始時創建一個新的實例。
singleTop當啟動一個已經有實例在最前面(即棧頂)的activity時,重用此實例,然后去調用onNewIntent()
函數,創建新的intent。
singleTask當要去一個已經有task啟動的activity的時候,不會去創建新的實例,而是將該task調至最前,已經存在的實例會去調用onNewIntent()函數創建新的intent。而對於之前的控件不會去銷毀,這又節省了創建view的時間
singleInstance當要創建新的activity時會在新的task中創建activity,即一個task中只能存在一個該activity的實例
具體見
http://developer.android.com/reference/android/R.attr.html#launchMode
2、在activity中新增
protected void onNewIntent(Intent intent)
函數。因為在該activity時需要調用此函數
參考
onNewIntent的介紹
http://developer.android.com/reference/android/app/Activity.html#onNewIntent(android.content.Intent)
task和activity的管理
http://developer.android.com/guide/topics/fundamentals/tasks-and-back-stack.html
activity的生命周期
http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle