體會android的啟動模式
這一篇寫的是自己,對android生命週期和啟動模式的一些體會。不是對android的生命週期和啟動模式的認識,所以直接跳過了認識部分。。。
android的生命週期
提下個別有用的知識點:
前台和後台的區別:我認為是否具有使用者互動的能力
在activity的週期中:
著重注意:onstart()和onstop(),onresume()和onpause()這兩對。
從巨集**:
onstart()和onstop()作用為activity是否可見。
onresume()和onpause()作用為activity在前台還是後台
android的啟動模式
1.standard(預設)
誰啟動了這個activity,那麼這個activity就執行在啟動它的那個activity所在的棧中,這種模式下activity的例項隨便整。如下圖:
中文式瞎翻一下:棧頂為單例。
這個就是說,如果你啟動的activity已經存在,且為啟動activity所在棧的棧頂,那麼你啟動的activity將不在建立例項,直接復用棧頂的activity的例項。此時activity不會呼叫自己的oncreate()與onstart()方法,因為我們復用了該activity已經在棧頂的例項。但是它回去呼叫onnewintent(intent)為你傳遞啟動activity的請求資訊。如果你啟動的activity已經存在,但不為啟動activity所在棧的棧頂,那麼它將重寫建立。
如果棧為圖一情況:此時需要啟動c,則不會重寫建立,而是復用棧頂c.
如果棧為圖二情況:如果需要建立乙個c,此時棧中沒有肯定會建立乙個c.而需要建立乙個a那???答案為圖三,也會重寫建立乙個a.
3.singletask
中文式瞎翻譯下:activity單任務。
這個所說的是,如果你啟動的activity已經存在,且在啟動activity所在棧中,那麼系統會幫你把該activity例項上面的所用其它activity例項退出棧,使其自己為棧頂,這樣來達到建立自己的效果。
**:如果我們此時棧為圖一,我們需要啟動a,結果為圖二。
當然還要再提下裡面的乙個重要知識點:taskaffinity(任務棧的名字)與singletask連用開啟新的任務棧
有taskaffinity 要注意
1.其值為字串且中間必須包含分隔符.(前面為字母模式小數點)
2.預設值為應用包名。
已知 三個activity 分別為a,b,c。a,c為standard模式,b為singletask+taskaffinity="com.xi"模式。
a啟動b,b啟動c
回退是c-->b-->a 表現和正常情況一樣。。。但棧情況不同,如下圖。
4.singleinstance(重點)
中文式瞎翻譯:單例
下面根據乙個例子來認識下singleinstance:
已知 三個activity 分別為a,b,c。a,c為standard模式,b為singleinstance模式。
說明:a-->b-->c表示a啟動b,b啟動c。
解答按下面順序啟動activity後,按back鍵後退,activity的出棧順序???
一、a-->b-->c 則出棧順序為c-->a-->b
解釋下:
啟動後棧的情況:
先退出當前棧所有activity,在退出與其有關聯的棧。
二、a-->b-->c ,按home鍵,然後再其後台開啟該應用。此時返回順序為a-->b-->手機主頁。
解釋:首先要明白:手機主頁也是乙個activity,而且有其自己獨有的棧。其次要知道,幾個不同棧退棧時也有順序,按其執行順序。
看下圖
對於其順序:(圖標識了棧的編號)
我們從a啟動b,然後啟動c,此時順序編號為12。按下home鍵,為312。再開啟,為132.於是退棧順序為132,但是退到3時為手機頁,相當於退出了程式,就沒有2啥事了。
如果根據第二種情況分析,返回順序應該為b-->手機主頁。但為啥不一樣了???
android生命週期
通用生命週期流程如下 正常啟動 oncreate onstart onpost oncreate onresume onpostresume 轉向下乙個activity onpause onstop 從下乙個activity返回當前 按機器返回鍵 onrestart onstart onresume...
android生命週期
oncreate 第一次進入此頁面或者從其他頁面跳轉到此頁面時呼叫此方法。從其他頁面按下返回鍵到達此頁面時不執行該方法。onstart 第一次進入此頁面或者從其他頁面跳轉到此頁面時呼叫此方法,在oncreate 後執行。如果從第二個頁面發揮到此頁面也執行此方法,是在onrestart 後執行。onr...
android生命週期
1 程式的正常啟動 oncreate onstart onresume 2 程式正常退出 onpause onstop ondestory 3 乙個activity啟動另乙個activity onpause onstop 再返回onrestart onstart onresume 4 程式按back...