成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Android中Activity啟動模式詳解

移動開發 Android
在Android中每個界面都是一個Activity,切換界面操作其實是多個不同Activity之間的實例化操作。在Android中Activity的啟動模式決定了Activity的啟動運行方式。

在Android中每個界面都是一個Activity,切換界面操作其實是多個不同Activity之間的實例化操作。在Android中Activity的啟動模式決定了Activity的啟動運行方式。

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

Activity啟動模式設置:

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

Activity的四種啟動模式:

1. standard

模式啟動模式,每次激活Activity時都會創建Activity,并放入任務棧中。

2. singleTop

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

3. singleTask

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

4. singleInstance

在一個新棧中創建該Activity實例,并讓多個應用共享改棧中的該Activity實例。一旦改模式的Activity的實例存在于某個棧中,任何應用再激活改Activity時都會重用該棧中的實例,其效果相當于多個應用程序共享一個應用,不管誰激活該Activity都會進入同一個應用中。

standard

其中standard是系統默認的啟動模式。

下面通過實例來演示standard的運行機制:

  1. private TextView text_show; 
  2.      private Button btn_mode; 
  3.      @Override 
  4.      public void onCreate(Bundle savedInstanceState) { 
  5.          super.onCreate(savedInstanceState); 
  6.          setContentView(R.layout.activity_main); 
  7.           
  8.          text_show = (TextView) this.findViewById(R.id.text_show); 
  9.           
  10.          text_show.setText(this.toString()); 
  11.           
  12.          btn_mode = (Button) this.findViewById(R.id.btn_mode); 
  13.           
  14.      } 
  15.       
  16.     //按鈕單擊事件 
  17.      public void LaunchStandard(View v){ 
  18.          startActivity(new Intent(this,MainActivity.class)); 
  19.           
  20.          text_show.setText(this.toString()); 
  21.      } 

初始化界面如下:

當點擊按鈕時,會創建新的Activity,通過TextView@后16進制數的顯示即可看出,點擊兩次分別界面如下:

此時,我們分析棧內部的運行機制:(依次從棧頂向上)

因此,這種Standard模式是每次都會創建新的Activity對象,當點擊返回按鈕時,他會將棧頂(當前Activity)消滅,然后跳 到下一層,例如如果現在Activity是44ed8c50,那么當我們點擊返回時Activity會變為44f28a48,不過此時在這個 Activity中再次點擊按鈕創建對象時,它會另外創建新的Activity對象,這種模式可能大多數情況下不是我們需要的,因為對系統性能的消耗過 大。

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

singleTop

從上面的解釋中即可知道,在每次使用新的Activity時會自動檢測棧頂的當前Activity是否是需要引用的Activity,如果是則直接引用此Activity,而不會創建新的Activity。

我們在剛才的界面中加入一個"啟動singletop模式"按鈕,當點擊時出現我們創建的singletop中,在Activity singletop中有一個按鈕,啟動singletop模式,表示啟動當前Activity,由于我們在清單文件中配置Activity的啟動模式為 singleTop,因此此時不會再創建而是利用當前棧頂的singleTop Activity:

  1. <activity 
  2.             android:name=".SingleTopActivity" 
  3.             android:label="@string/singletop" 
  4.             android:launchMode="singleTop" > 
  5. </activity> 

界面初始化:

點擊"啟動singleTop模式"按鈕:

    

我們分析它的運行機制,可知,當程序運行到此時,棧中的數據形式為:

當我們在上面界面中點擊"啟動singleTop模式"按鈕時,由于此Activity設置的啟動模式為singleTop,因此它首先會 檢測當前棧頂是否為我們要請求的Activity對象,經驗證成立,因此它不會創建新的Activity,而是引用當前棧頂的Activity。

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

  1. @Override 
  2.      protected void onNewIntent(Intent intent) { 
  3.         // TODO Auto-generated method stub 
  4.         super.onNewIntent(intent); 
  5.          
  6.         Toast.makeText(thisnew Date().toString(), 1).show(); 
  7.     } 

我們為此方法編寫代碼輸出當前日期,則在每次點擊上面按鈕時會輸出當前日期。

singleTask

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

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

初始化:

點擊"啟動singleTask模式"按鈕:

在此界面中點擊第二個按鈕"啟動singleTask模式"按鈕,根據定義會檢測當前棧中是否有此Activity對象,因此顯示的還是當前的Activity,不會重新創建;

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

此時棧中數據格式為:

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

SingleInstance

此啟動模式和我們使用的瀏覽器工作原理類似,我們都知道在多個程序中訪問瀏覽器時,如果當前瀏覽器沒有打開,則打開瀏覽器,否則會在當前打開的瀏覽器中訪問。此模式會節省大量的系統資源,因為他能保證要請求的Activity對象在當前的棧中只存在一個。

上面即為Android中的四種啟動模式,我們在開發Android項目時會經常使用到,巧妙設置Activity的啟動模式會節省系統開銷和程序運行效率。

責任編輯:閆佳明 來源: cnblogs
相關推薦

2017-08-03 10:25:26

AndroidActivity

2023-12-09 08:58:30

AndroidActivity啟動模式

2021-08-11 17:15:17

AndroidActivity場景

2016-03-24 14:02:05

ActivityAndroid啟動

2011-06-01 17:35:35

Android Activity

2010-01-21 09:08:53

.NET設計模式

2011-05-26 15:22:57

Android Activity

2021-08-23 06:27:46

AndroidctivitysetContentV

2023-07-03 07:39:43

Spring框架設計模式

2010-02-06 10:04:10

Android啟動模式

2011-06-28 15:18:45

Qt 單例模式

2010-01-28 13:43:48

Android啟動Ja

2022-06-14 15:45:52

UbuntuLinux

2023-09-22 11:58:49

2010-07-13 09:08:27

Widget開發

2015-10-20 15:54:16

android源碼滑動關閉

2012-02-17 17:07:30

Android安全Activity劫持

2013-01-08 13:33:07

Android開發Activity入門指南

2019-01-03 09:45:02

Ubuntu救援模式

2021-06-29 08:54:23

設計模式代理模式遠程代理
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久av一区二区三区 | 午夜a级理论片915影院 | 国产精品不卡一区 | 一区二区三区精品视频 | 97久久超碰| 日韩欧美国产一区二区 | 国产成人综合亚洲欧美94在线 | 免费视频成人国产精品网站 | 久久一区二区av | 亚洲一区综合 | 欧美日韩在线精品 | 精品无码久久久久久国产 | 91色视频在线观看 | 免费久久精品 | caoporn国产精品免费公开 | 国产精品亚洲综合 | 国产日韩欧美二区 | 色婷婷国产精品综合在线观看 | 黄色免费三级 | 在线观看特色大片免费网站 | 91免费观看国产 | 2021天天干夜夜爽 | 亚洲午夜精品一区二区三区他趣 | 99这里只有精品 | 午夜小视频在线观看 | 91视频网址| 欧美在线一二三 | 国产精品免费一区二区三区四区 | 国产小视频在线观看 | 国产一区二区三区在线视频 | 一区二区三区中文字幕 | 欧美日韩在线免费 | 日韩精品中文字幕在线 | av一区二区三区 | 亚洲一区二区久久 | 韩国av一区二区 | 久久久久久久夜 | 国产欧美精品一区二区三区 | 欧美大片久久久 | 国产精品亚洲成在人线 | 中文成人无字幕乱码精品 |