對於Android的生命週期和啟動模式的一些體會

2021-08-23 12:07:22 字數 2729 閱讀 8275

體會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...