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

歡迎訪問 生活随笔!

生活随笔

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

Android

Android学习之基础知识四-Activity活动7讲(活动的启动模式)

發布時間:2023/12/20 Android 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android学习之基础知识四-Activity活动7讲(活动的启动模式) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  在實際的項目開發中,我們需要根據特定的需求為每個活動指定恰當的啟動模式。Activity的啟動模式一共有4種:standard、singleTop、singleTask、singleInstance.?可以在AndroidManifest.xml中通過給<activity>標簽指定android:launchMode屬性來選擇啟動模式

一、standard

  standard模式是活動默認的啟動模式,在該模式下,每啟動一個活動都會創建該活動的一個新的實例并放在棧頂的位置,而不在乎返回棧里面是否已經存在該活動。

standard模式的示意圖:

Java代碼:

?

效果:點擊三次button1按鈕,都會打開FirstActivity活動界面,查看Logcat日志,可以看到創建了三個FirstActivity活動的實例,退出該活動界面需要點擊三次Back鍵才退出。

?

?二、singleTop

?  singleTop啟動模式的工作原理:當每次啟動活動時,系統會先在返回棧中檢查棧頂的活動是不是當前正在啟動的活動,如果是當前正在啟動的活動,那么就會直接使用棧頂的這個實例,不會再創建新的實例,如果不是當前正在啟動的活動,那么才會創建一個新的活動實例。

  需要注意的是:如果棧內已經存在當前正在啟動的活動,還是會重新創建一個新的活動實例。

singleTop模式的示意圖:

情況一:正在創建的活動位于棧頂

?Java代碼:

修改AndroidManifest.xml中FirstActivity活動的啟動模式:

?

運行程序:

?

在程序運行成功的時候,會創建一個FirstActivity活動的實例,然后我們點擊button1,不管點擊多少次,從Logcat日志中我們可以看到,除了剛開始運行程序的時候創建了一個實例外,沒有再創建新的實例。

按Back鍵退出程序也只需要按一次Back鍵就行了。

?

情況二:返回棧內部存在當前正在啟動的活動

?兩個活動:FirstActivity、SecondActivity

?

運行程序:因為啟動了FirstActivity活動,所以此時只創建了一個FirstActivity活動的實例

點擊button1按鈕進入SecondActivity活動界面:創建了SecondActivity活動的實例

?

點擊button2按鈕,返回到FirstActivity活動界面:此時又創建了一個FirstActivity活動的實例。

?

經過 上面整個過程,返回棧中總共存在三個活動的實例,從棧底到棧頂依次是:FirstActivity--->SecondActivity--->FirstActivity

此時點擊Back鍵,活動的運行順序是:FirstActivity?Back--->SecondActivity?Back--->FirstActivity?Back--->程序關閉

第一次點擊Back:

?

第二次點擊Back:

第三次點擊Back:結束程序

?

三、singleTask

  singleTask啟動模式:每次啟動一個活動時,系統會先檢查返回棧中是否存在該活動,如果存在該活動,那么就會直接使用該實例,不會再創建一個該活動的實例,并使該活動之上的所有活動都出棧。如果不存在該活動,那么就會創建一個新的活動實例。

singleTask模式示意圖:

示例:

第一步:將FirstActivity活動的啟動模式設為singleTask模式

第二步:在FirstActivity活動中添加onRestart()方法,并打印日志

第三步:在SecondActivity活動中添加onDestroy()方法,并打印日志

第四步:運行程序,進入FirstActivity活動--->點擊button1按鈕進入SecondActivity活動界面--->點擊button2按鈕返回到FirstActivity

第五步:看Logcat日志,從日志中可以看到,運行程序的時候,只創建了FirstActivity活動的一個實例,當啟動SecondActivity活動時,又創建了SecondActivity活動的一個實例,此時兩個實例在返回棧中的位置是:FirstActivity活動的實例在棧底,SecondActivity活動的實例在棧頂。當點擊button2按鈕啟動FirstACtivity活動時,此時SecondActivity活動實例被移除棧頂,因此調用了SecondActivity活動的onDestroy()方法,而FirstActivity活動從棧底位置到了棧頂位置,這個時候并沒有再創建FirstActivity活動的實例,只是重新返回到了該活動,從不可見變為了可見狀態,因此此時FirstActivity是調用了onReStart()方法,而沒有調用初始化方法onCreate()方法。

?

四、singleInstance

  場景:假設我們程序中的一個活動允許其他程序調用,如果我們想實現其他程序和我們的程序能夠共享這個活動的實例,那么應該怎么實現呢?每個用于程序都有自己的返回棧,同一個活動在不同的返回棧中必然是創建了一個新的活動實例的,而我們共享的這個活動在一個返回棧中,共享同一個實例。

?  singleInstance啟動模式:singleInstance啟動模式與其它三種啟動模式不同,它是通過創建一個新的返回棧來管理活動的(如果singleTask模式指定了不同的taskAffinity,也會啟動一個新的返回棧),在這種模式下,會有一個單獨的返回棧來管理活動,不管哪個應用程序來訪問這個活動,都共用同一個返回棧,也就解決了共享活動實例的問題。

singleInstance模式的示意圖:

示例:

第一步:將SecondActivity活動的啟動模式設置為singleInstance

第二步:創建活動后,打印出FirstActivity活動、SecondActivity活動、ThirdActivity活動所在的返回棧

第三步:運行程序,進入FirstActivity活動界面--->點擊按鈕,進入SecondActivity界面--->點擊按鈕進入ThirdACtivity界面,打開日志,從日志中我們可以發現FirstActivity活動與SecondActivity活動都在返回棧16中,而SecondActivity活動在返回棧17中,也就是說在啟動SecondActivity活動的時候,系統重新創建了一個返回棧17專門來管理活動SecondActivity.

第四步:此時在ThirdActivity活動界面點擊Back鍵,就會直接回到了FirstActivity活動界面,這是因為返回棧16是我們運行程序的返回棧,在這個返回棧中只有FirstActivity和ThirdActivity兩個活動,FirstActivity活動位于棧底,ThirdActivity活動位于棧頂,當點擊Back鍵時,ThirdActivity活動出棧,FirstActivity活動就位于棧頂位置了,所以此時顯示的是FirstActivity活動,而不是SecondActivity活動,緊接著再點擊Back鍵,FirstActivity活動出棧,這時候就返回到了SecondActivity活動的界面,這是因為返回棧16已經空了,只剩下返回棧17,而返回棧17中只有SecondActivity一個活動,因此顯示的就是SecondActivity活動的界面,然后再點擊Back鍵,系統退出。

五、活動啟動模式總結

  1、standard:系統默認啟動方式,所有活動在一個返回棧,每啟動一個活動就會在返回棧的棧頂創建一個該活動的實例,與返回棧中有無該活動的實例無關。

  2、singleTop:所有活動都在一個返回棧,每啟動一個活動,系統會先檢查返回棧的棧頂的活動是不是當前啟動的活動,如果是,就直接使用,如果不是,就會創建一個新的活動實例,與棧頂以下是否存在該活動實例無關。

  3、singleTask:所有活動都在一個返回棧,每啟動一個活動,系統會先檢查返回棧里面是否存在了該實例,如果存在,那么會把該實例上面的所有活動出棧,然后自己位于棧頂位置,如果不存在,那么會創建新的活動實例位于棧頂。(如果指定了不同的taskAffinity,也會啟動一個新的返回棧)

  4、singleInstance:通過創建一個新的返回棧來管理活動,可以達到不同的應用程序共享同一個活動的目的。

轉載于:https://www.cnblogs.com/hh8888-log/p/9878722.html

總結

以上是生活随笔為你收集整理的Android学习之基础知识四-Activity活动7讲(活动的启动模式)的全部內容,希望文章能夠幫你解決所遇到的問題。

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