溫馨提示×

溫馨提示×

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

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

如何理解Activity啟動模式

發(fā)布時間:2021-11-25 22:20:40 來源:億速云 閱讀:132 作者:柒染 欄目:移動開發(fā)

如何理解Activity啟動模式,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

Activity的啟動模式有四種,standard、singleTop、singleTask、singleInstance.

如何理解Activity啟動模式

1.standard

standard是Activity默認(rèn)的啟動模式,在不進(jìn)行顯示指定的情況下,所有活動都會自動使用這種啟動模式。

每次啟動都一個新的Activity位于棧頂。

android:launchMode="standard",此時每次點(diǎn)擊按鈕都會創(chuàng)建新的Activity

現(xiàn)在,我們寫一個簡單的按鈕 ,實(shí)現(xiàn)跳轉(zhuǎn)Activity

private Button button;     @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);         Log.e("MainActivity",this.toString());         button = (Button)findViewById(R.id.button);         button.setOnClickListener(new View.OnClickListener() {             @Override             public void onClick(View view) {                 Intent intent = new Intent(MainActivity.this, MainActivity.class);                 startActivity(intent);             }         });     }

雖然跳轉(zhuǎn)的頁面相同,但是在Task中每點(diǎn)一次按鈕就會創(chuàng)建一個新的Activity

如何理解Activity啟動模式

Activity創(chuàng)建日志

如何理解Activity啟動模式

啟動示例圖

2.singleTop

當(dāng)Activity的啟動模式為singleTop時,當(dāng)啟動的Activity已經(jīng)處于Activity棧頂時,則直接使用。

android:launchMode="singleTop"

我們創(chuàng)建NextActivity,并且在MainActivity中添加button2

private Button button1,button2;      @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);         Log.e("MainActivity", this.toString());         button1 = (Button) findViewById(R.id.button1);         button2 = (Button) findViewById(R.id.button2);         button1.setOnClickListener(this);         button2.setOnClickListener(this);      }      @Override     public void onClick(View view) {         switch (view.getId()){             case R.id.button1:                 Intent intent = new Intent(MainActivity.this, MainActivity.class);                 startActivity(intent);                 break;             case R.id.button2:                 Intent intent2 = new Intent(this, NextActivity.class);                 startActivity(intent2);                 break;         }     }

此時在MainActivity中啟動MainActivity,則Activity棧中只會創(chuàng)建一次;但是先啟動NextActivity之后再啟動MainActivity,則會創(chuàng)建新的MainActivity,因?yàn)榇藭r的Activity棧頂是NextActivity

如何理解Activity啟動模式

MainActivity ->MainActivity ->MainActivity

如何理解Activity啟動模式

MainActivity -> NextActivity -> MainActivity

如何理解Activity啟動模式

啟動示例圖

3.singleTask

當(dāng)活動的啟動模式為singleTask時,啟動該Activity會現(xiàn)在棧中檢查是否已存在,若存在則直接將該活動之上的Activity全部出棧。

android:launchMode="singleTask"

如何理解Activity啟動模式

啟動示例圖

4.singleInstance

singleInstance模式下會有一個單獨(dú)的返回棧來管理活動。不管哪個應(yīng)用程序來訪問該活動,都共用同一個棧,這樣就可以允許其他程序調(diào)用,實(shí)現(xiàn)共享該活動。

android:launchMode="singleInstance"

如何理解Activity啟動模式

啟動示例圖

圖中啟動的過程是:Main -> New -> Next 這個過程很容易看懂

返回過程是:Next -> Main -> New

明顯看出順序不一樣,為什么會出現(xiàn)這種情況呢?

NextActivity和MainActivity處于同一個棧,當(dāng)我們返回時,NextActivity出棧,此時棧A中還存在MainActivity,并且處于棧頂,所以會看到MainActivity.

當(dāng)MainActivity執(zhí)行返回時,棧A會清空,然后我們就看到了位于棧B的NewActivity。

之后NewActivity出棧,棧B也為空時,App退出。

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(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)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI