溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Android中Activity有哪些啟動模式

發(fā)布時間:2021-07-20 15:00:07 來源:億速云 閱讀:153 作者:Leah 欄目:移動開發(fā)

Android中Activity有哪些啟動模式,相信很多沒有經(jīng)驗(yàn)的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

Android總Activity的啟動模式分為四種:

Activity啟動模式設(shè)置:

<activity android:name=".MainActivity" android:launchMode="standard" />

Activity的四種啟動模式:

1. standard

模式啟動模式,每次激活A(yù)ctivity時都會創(chuàng)建Activity,并放入任務(wù)棧中。

2. singleTop

如果在任務(wù)的棧頂正好存在該Activity的實(shí)例, 就重用該實(shí)例,否者就會創(chuàng)建新的實(shí)例并放入棧頂(即使棧中已經(jīng)存在該Activity實(shí)例,只要不在棧頂,都會創(chuàng)建實(shí)例)。

3. singleTask

如果在棧中已經(jīng)有該Activity的實(shí)例,就重用該實(shí)例(會調(diào)用實(shí)例的onNewIntent())。重用時,會讓該實(shí)例回到棧頂,因此在它上面的實(shí)例將會被移除棧。如果棧中不存在該實(shí)例,將會創(chuàng)建新的實(shí)例放入棧中。

4. singleInstance

在一個新棧中創(chuàng)建該Activity實(shí)例,并讓多個應(yīng)用共享改棧中的該Activity實(shí)例。一旦改模式的Activity的實(shí)例存在于某個棧中,任何應(yīng)用再激活改Activity時都會重用該棧中的實(shí)例,其效果相當(dāng)于多個應(yīng)用程序共享一個應(yīng)用,不管誰激活該Activity都會進(jìn)入同一個應(yīng)用中。

standard

其中standard是系統(tǒng)默認(rèn)的啟動模式。

下面通過實(shí)例來演示standard的運(yùn)行機(jī)制:

private TextView text_show;      private Button btn_mode;      @Override      public void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.activity_main);                    text_show = (TextView) this.findViewById(R.id.text_show);                    text_show.setText(this.toString());                    btn_mode = (Button) this.findViewById(R.id.btn_mode);                }       //按鈕單擊事件      public void LaunchStandard(View v){          startActivity(new Intent(this,MainActivity.class));                    text_show.setText(this.toString());      }

初始化界面如下:

Android中Activity有哪些啟動模式

當(dāng)點(diǎn)擊按鈕時,會創(chuàng)建新的Activity,通過TextView@后16進(jìn)制數(shù)的顯示即可看出,點(diǎn)擊兩次分別界面如下:

Android中Activity有哪些啟動模式

Android中Activity有哪些啟動模式

此時,我們分析棧內(nèi)部的運(yùn)行機(jī)制:(依次從棧頂向上)

Android中Activity有哪些啟動模式

因此,這種Standard模式是每次都會創(chuàng)建新的Activity對象,當(dāng)點(diǎn)擊返回按鈕時,他會將棧頂(當(dāng)前Activity)消滅,然后跳 到下一層,例如如果現(xiàn)在Activity是44ed8c50,那么當(dāng)我們點(diǎn)擊返回時Activity會變?yōu)?4f28a48,不過此時在這個 Activity中再次點(diǎn)擊按鈕創(chuàng)建對象時,它會另外創(chuàng)建新的Activity對象,這種模式可能大多數(shù)情況下不是我們需要的,因?yàn)閷ο到y(tǒng)性能的消耗過 大。

下面我們介紹兩種能使用當(dāng)前棧中Activity的啟動模式:

singleTop

從上面的解釋中即可知道,在每次使用新的Activity時會自動檢測棧頂?shù)漠?dāng)前Activity是否是需要引用的Activity,如果是則直接引用此Activity,而不會創(chuàng)建新的Activity。

我們在剛才的界面中加入一個"啟動singletop模式"按鈕,當(dāng)點(diǎn)擊時出現(xiàn)我們創(chuàng)建的singletop中,在Activity singletop中有一個按鈕,啟動singletop模式,表示啟動當(dāng)前Activity,由于我們在清單文件中配置Activity的啟動模式為 singleTop,因此此時不會再創(chuàng)建而是利用當(dāng)前棧頂?shù)膕ingleTop Activity:

<activity             android:name=".SingleTopActivity"             android:label="@string/singletop"             android:launchMode="singleTop" > </activity>

界面初始化:

Android中Activity有哪些啟動模式

點(diǎn)擊"啟動singleTop模式"按鈕:

Android中Activity有哪些啟動模式  

我們分析它的運(yùn)行機(jī)制,可知,當(dāng)程序運(yùn)行到此時,棧中的數(shù)據(jù)形式為:

Android中Activity有哪些啟動模式

當(dāng)我們在上面界面中點(diǎn)擊"啟動singleTop模式"按鈕時,由于此Activity設(shè)置的啟動模式為singleTop,因此它首先會 檢測當(dāng)前棧頂是否為我們要請求的Activity對象,經(jīng)驗(yàn)證成立,因此它不會創(chuàng)建新的Activity,而是引用當(dāng)前棧頂?shù)腁ctivity。

Android中Activity有哪些啟動模式

雖然它不會創(chuàng)建新的Activity對象,不過它每次回調(diào)用onNewIntent()方法:

@Override      protected void onNewIntent(Intent intent) {         // TODO Auto-generated method stub         super.onNewIntent(intent);                  Toast.makeText(this, new Date().toString(), 1).show();     }

我們?yōu)榇朔椒ň帉懘a輸出當(dāng)前日期,則在每次點(diǎn)擊上面按鈕時會輸出當(dāng)前日期。

singleTask

此啟動模式和singleTop在名字上即可看出區(qū)別,即singleTop每次只檢測當(dāng)前棧頂?shù)腁ctivity是否是我們需要請求創(chuàng)建的,而 singleTask則會檢測棧中全部的Activity對象,從上向下,如果檢測到是我們所請求的則會消滅此Activity對象上面的對象,直接把檢 測到的我們需要的Activity置為棧頂。

我們創(chuàng)建一個SingleTaskActivity,此界面中包含一個啟動MainActivity和啟動SingleTaskActivity按鈕。

初始化:

Android中Activity有哪些啟動模式

點(diǎn)擊"啟動singleTask模式"按鈕:

Android中Activity有哪些啟動模式

在此界面中點(diǎn)擊第二個按鈕"啟動singleTask模式"按鈕,根據(jù)定義會檢測當(dāng)前棧中是否有此Activity對象,因此顯示的還是當(dāng)前的Activity,不會重新創(chuàng)建;

再點(diǎn)擊"啟動Standard模式"按鈕,由于MainActivity的啟動模式為standard,所以在此會重新創(chuàng)建一個MainActivity對象:

Android中Activity有哪些啟動模式

此時棧中數(shù)據(jù)格式為:

Android中Activity有哪些啟動模式

當(dāng)在上面界面中點(diǎn)擊"啟動singleTask模式"按鈕時,由于檢測到當(dāng)期棧中第二個為我們要創(chuàng)建的Activity,會將最上面的MainActivity消滅,然后將SingleTaskActivity設(shè)置為棧頂:

Android中Activity有哪些啟動模式

SingleInstance

此啟動模式和我們使用的瀏覽器工作原理類似,我們都知道在多個程序中訪問瀏覽器時,如果當(dāng)前瀏覽器沒有打開,則打開瀏覽器,否則會在當(dāng)前打開的瀏覽器中訪問。此模式會節(jié)省大量的系統(tǒng)資源,因?yàn)樗鼙WC要請求的Activity對象在當(dāng)前的棧中只存在一個。

看完上述內(nèi)容,你們掌握Android中Activity有哪些啟動模式的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI