日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

(Android第一行代码)活动的启动模式

發布時間:2024/4/15 Android 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (Android第一行代码)活动的启动模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

活動的啟動模式

啟動模式一共有四種,分別是 standard、singleTop、 singleTask 和 singleInstance,可以在 AndroidManifest.xml 中通過給<activity>標簽指定 android:launchMode屬性來選擇啟動模式。下面我們來逐個進行學習。


1.standard模式:(對于使用 standard 模式的活動,系統不會在乎這個活動是否已經在返回棧中存在,每次啟動都會創建 該活動的一個新的實例。)

??是活動默認的啟動模式

?修改 FirstActivity中 onCreate()方法的代碼,如下所示:

?????????????? @Override

??? ?protected void onCreate(Bundle savedInstanceState) {?

?????????? ?super.onCreate(savedInstanceState);?

??????????//從打印信息中我們就可以看出,每點擊一次按鈕就會創建出一個新的 FirstActivity實例我們需要按三次back才能退出程序。

?????????? ?Log.d("FirstActivity", this.toString());?

????????????requestWindowFeature(Window.FEATURE_NO_TITLE);?

???????? ? ?setContentView(R.layout.first_layout);?

?????????? ?Button button1 = (Button) findViewById(R.id.button_1);

?????????? button1.setOnClickListener(new OnClickListener() {?

????????????? ?@Override

??????????public void onClick(View v) {?

???????????? //我們,在 FirstActivity的基礎上啟動 FirstActivity。

?????????????????? ?Intent intent = new Intent(FirstActivity.this, FirstActivity.class);??

??????????????????? startActivity(intent);

??????????? ?}

?????????? });

???? }

2.singleTop模式(在啟動活動時如果發現返回棧的棧頂已經是該活動,則認為可以直接使用 它,不會再創建新的活動實例。)

?????? 修改 AndroidManifest.xml中 FirstActivity的啟動模式,

??????? <activity????

???????????? ?android:name=".FirstActivity"

?????????? //修改 AndroidManifest.xml中 FirstActivity的啟動模式,

??????????? ? android:launchMode="singleTop"?

??????????? ?android:label="This is FirstActivity" >?

?????????? ? <intent-filter>????

?????????????? ? <action android:name="android.intent.action.MAIN" />?

?????????????? ? <category android:name="android.intent.category.LAUNCHER" />?

?????????????</intent-filter>

????? </activity>

?然后重新運行程序,查看 LogCat會看到已經創建了一個 FirstActivity的實例.僅按一次 Back鍵就可以退出程序。不過當 FirstActivity并未處于棧頂位置時,這時再啟動 FirstActivity,還是會創建新的實 例的。

3.singleTask模式(當活動的啟動模式指定為 singleTask,每次啟動該活動時系統首先 會在返回棧中檢查是否存在該活動的實例,如果發現已經存在則直接使用該實例,并把在這 個活動之上的所有活動統統出棧,如果沒有發現就會創建一個新的活動實例。)

  • ?修改 AndroidManifest.xml中 FirstActivity的 啟動模式

????? <activity??

?????????????? android:name=".FirstActivity"

??????? //修改 AndroidManifest.xml中 FirstActivity的 啟動模式

???????????? ? android:launchMode="singleTask"?

?????????????? android:label="This is FirstActivity" >???

???????? ?<intent-filter>???????

????????????? ?<action android:name="android.intent.action.MAIN" />??????

????????????? ?<category android:name="android.intent.category.LAUNCHER" />?

??????? </intent-filter>

?????</activity>

  • ??? 然后在 FirstActivity中添加 onRestart()方法,并打印日志:

???? ?@Override

???????protected void onRestart() {?

??????????? ?super.onRestart();?

?????????????Log.d("FirstActivity", "onRestart");

?? }

  • ? 最后在 SecondActivity中添加 onDestroy()方法,并打印日志:

?????? @Override protected void onDestroy() {?

??????????????????? super.onDestroy();

?????????? ? Log.d("SecondActivity", "onDestroy");

?? }

在 SecondActivity 中啟動 FirstActivity 時,會發 現返回棧中已經存在一個 FirstActivity 的實例,并且是在 SecondActivity 的下面,于是 SecondActivity 會從返回棧中出棧,而 FirstActivity 重新成為了棧頂活動,因此 FirstActivity 的 onRestart()方法和 SecondActivity的 onDestroy()方法會得到執行。

4.singleInstance模式(指定為 singleInstance模式的活動會啟用一 個新的返回棧來管理這個活動)

?????使用場景:假設我們的程序中有一個 活動是允許其他程序調用的,如果我們想實現其他程序和我們的程序可以共享這個活動的實例。?使用前面三種啟動模式肯定是做不到的,因為每個??? 應用程序都會有自 己的返回棧同一個活動在不同的返回棧中入棧時必然是創建了新的實例。而使用 singleInstance模式就可以解決這個問題,在這種模式下會有一個單獨的返回棧來管理這個活 動,不管是哪個應用程序來訪問這個活動,都共用的同一個返回棧。

  • 修改 AndroidManifest. xml中 SecondActivity的啟動模式:

???????? <activity?

?????????????? android:name=".SecondActivity"?

???????? //修改 AndroidManifest. xml中 SecondActivity的啟動模式:

????????????? ?android:launchMode="singleInstance" >??

???????????? ?<intent-filter>??

?????????????????? ?<action android:name="com.example.activitytest.ACTION_START" />????

????????????????????<category android:name="android.intent.category.DEFAULT" />?????

????????????????? ? <category android:name="com.example.activitytest.MY_CATEGORY" />?

?????????? ??????? ?</intent-filter>

???????????? </activity>

  • ???? 修改 FirstActivity 中 onCreate()方法的代碼,在 onCreate()方法中打印了當前返回棧的 id.

?????????????? Log.d("FirstActivity", "Task id is " + getTaskId());

  • ???? 修改 SecondActivity中 onCreate()方法 的代碼,打印了當前返回棧的 id.

?????????? ???? Log.d("SecondActivity", "Task id is " + getTaskId());

  • ???? 最后修改 ThirdActivity中 onCreate()方法仍然是在 onCreate()方法中打印了當前返回棧的 id.

??????????? ?????Log.d("ThirdActivity", "Task id is " + getTaskId());

??????打印結果:

?可以看到,SecondActivity 的 Task id 不同于 FirstActivity 和 ThirdActivity,這說明 SecondActivity確實是存放在一個單獨的返回棧里的,而且這個棧中只有 SecondActivity這一 個活動。

???

???????

???

??

?????

??

轉載于:https://www.cnblogs.com/weichenji/p/6102979.html

總結

以上是生活随笔為你收集整理的(Android第一行代码)活动的启动模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。