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

歡迎訪問 生活随笔!

生活随笔

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

Android

Android初级开发笔记-- activity启动模式的学习(1)

發布時間:2025/4/16 Android 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android初级开发笔记-- activity启动模式的学习(1) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第一次學習Android中一個很重要的概念,啟動模式。文章記錄的也只是一些入門知識,隨著學習的深入還會有activity啟動模式的學習(2)和(3)。 下面分三個小點說一下對啟動模式的理解區別以及如何設置。

預備知識

(1)activity是以任務棧的方式進行管理的,棧是一種先進后出的數據結構,棧中的activity只能通過出棧和壓棧的方式改變順序。 (2)啟動一個application的時候,系統會默認創建一個任務棧,默認啟動的activity都在同一個任務棧中。當啟動另一個應用,之前那個任務棧就會被移到后臺,成為后臺任務棧,而剛啟動的那個任務棧就被調到前臺,成為前臺任務棧。在用戶面前顯示的始終是前臺任務棧中的棧頂activity。

對四種啟動模式的理解

Android里面說的啟動模式其實就是activity的啟動方式。 有下面四種

  • standard(默認)
  • singleTop(棧頂復用)
  • singleTask(棧內復用)
  • singleInstance(單例)

standard--系統默認的activity啟動模式,不管此時任務棧中的情況如何,每次啟動一個activity,系統都會創建它的實例,并將其置于棧頂。

singleTop--另外一種常用的啟動模式,當啟動一個activity時,系統會檢查一下當前任務棧中是否已經存在該activity實例,如果已經存在,就通過onNewIntent獲得該實例把它置于棧頂。如果沒有。那么創建該activity實例后將其置于棧頂。

singleTask-- 當以這種模式啟動activity的時候,需要指定其任務棧。 activityA啟動activityB的時候,會先在系統尋找是否存在該棧。

  • 不存在,創建棧并創建activity實例置于棧頂。
  • 存在,則在棧中尋找是否有B的實例,若有,則就通過onNewIntent獲得該實例至于棧頂。無則創建該activity實例后將其置于棧頂。

singleInstance--看到名字就會想到單例模式是吧~是的,確實也是這樣的思想。為了充分利用activity實例達到極致,設置這個啟動模式后,activityA啟動activityB,會專門為activityB創建一個任務棧,并且創建activityB實例至于棧頂。該activity實例便可被系統內的應用共享。

總結

對于時不時想把某個activity展示在用戶面前這件事,使用 默認:不管在不在棧頂,都創建(該棧中可能有多個實例)->棧頂復用:若在棧頂,則復用(該棧中可能有多個實例,但相對默認模式,少了點)->棧內復用:瞅瞅這個棧中有沒有,有就用,沒有就造一個(該棧中只有一個實例)->單例:直接自成一派,創個棧,只有這個activity一個實例并且在棧頂,不管哪個應用程序都能用(該應用程序上下文中只有一個實例)。 弄明白了這幾種啟動模式后,就需要根據實際情況決定使用哪種啟動模式。

具體使用場景

由于本人目前對啟動模式的使用比較少,后續有更多再補充。

  • 場景:使通知欄彈出Notification,點擊Notification跳轉到指定的Activity。 假設現在處于棧頂展示在用戶面前的就是這個activity。如果是默認模式,則會再次打開當前的Activity。這樣展示在用戶面前的效果就會很奇怪。(看起來是閃了一下) 如果使用的啟動模式是singleTop,就會避免這種現象的出現。

  • 場景:假設我們的程序中有一個Activity是允許其他程序調用的,我們想讓其他程序共享這個Activity的實例。如果使用的啟動模式是singleInstance,就可以解決這個問題。

如何設置activity的啟動模式

一般有兩種方式設置。

  • 在manifast文件中通過activity的launchMode進行設置。
  • 通過對啟動該activity的intent設置標志位實現。

疑惑及解答

1.如何設置不同的任務棧?

2.當activityA以標準模式啟動B的時候,B的實例被創建且處于activityA任務棧的頂端,那么這個時候B啟動了A(standard)呢?

3.這兩種設置方式有什么區別呢?常用的標志位有好幾個,組合起來使用又有什么不同的效果呢?

這些個答案等我下一篇文章再繼續介紹哈~敬請關注Android初級開發筆記-- activity啟動模式的學習(2)~

作者介紹

  • 楊曉華:廣州蘆葦科技 APP 團隊 Android 實習生

內推信息

  • 我們正在招募小伙伴,有興趣的小伙伴可以把簡歷發到 app@talkmoney.cn,備注:來自掘金社區
  • 詳情可以戳這里--> 廣州蘆葦信息科技

轉載于:https://juejin.im/post/5cf3f929f265da1b8d1605c5

總結

以上是生活随笔為你收集整理的Android初级开发笔记-- activity启动模式的学习(1)的全部內容,希望文章能夠幫你解決所遇到的問題。

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