Android Activity Launch Mode 启动模式详解
簡介
android:launchMode 屬性能設置 Activity 對象啟動時是否使用已有的實例還是多次創建,會使得交互設計更加良好,也能避免很多問題。
它是 Androidmanifest.xml 中 Activity 的屬性,如
四種屬性值
簡單介紹
Activity有四種啟動模式,它們是:
standard: 標準模式,也是不設置時的默認模式。每次都新建一個實例對象
singleTop: 如果在任務棧頂發現了相同的實例則重用,否則新建并壓入棧頂
singleTask: 如果在任務棧中發現了相同的實例,將其上面的實例對象終止并移除,重用該實例。否則新建實例并入棧
singleInstance :允許不同應用,進程線程等共用一個實例,無論從何應用調用該實例都重用
詳細介紹
standard
這是launchMode的默認值,Activity不包含android:launchMode或者顯示設置為standard的Activity就會使用這種模式。
一旦設置成這個值,每當有一次Intent請求,就會創建一個新的Activity實例。。結果就是這種模式會創建某個Activity的多個實例。
singleTop
singleTop其實和standard幾乎一樣,使用singleTop的Activity也可以創建很多個實例。唯一不同的就是,如果調用的目標Activity已經位于調用者的Task的棧頂,則不創建新實例,而是使用當前的這個Activity實例,并調用這個實例的onNewIntent方法。
使用場景
關于singleTop一個典型的使用場景就是搜索功能。假設有一個搜索框,每次搜索查詢都會將我們引導至SearchActivity查看結果,為了更好的交互體驗,我們在結果頁頂部也放置這樣的搜索框。
假設一下,SearchActivity啟動模式為standard,那么每一個搜索都會創建一個新的SearchActivity實例,10次查詢就是10個Activity。當我們想要退回到非SearchActivity,我們需要按返回鍵10次,這顯然太不合理了。
但是如果我們使用singleTop的話,如果SearchActivity在棧頂,當有了新的查詢時,不再重新創建SearchAc實例,而是使用當前的SearchActivity來更新結果。當我們需要返回到非SearchActivity只需要按一次返回鍵即可。使用了singleTop顯然比之前要合理。
singleTask
singleTask這個模式和前面提到的standard和singleTop截然不同。使用singleTask啟動模式的Activity在系統中只會存在一個實例。如果這個實例已經存在,intent就會通過onNewIntent傳遞到這個Activity。否則新的Activity實例被創建。
同一程序內
如果系統中不存在singleTask Activity的實例,那么就需要創建這個Activity的實例,并且將這個實例放入和調用者相同的Task中并位于棧頂。如下圖
如果singleTask Activity實例已然存在,那么在Activity回退棧中,所有位于該Activity上面的Activity實例都將被銷毀掉(銷毀過程會調用Activity生命周期回調),這樣使得singleTask Activity實例位于棧頂。與此同時,Intent會通過onNewIntent傳遞到這個SingleTask Activity實例。如下圖
singleInstance
這個模式和singleTask差不多,因為他們在系統中都只有一份實例。唯一不同的就是存放singleInstance Activity實例的Task只能存放一個該模式的Activity實例。如果從singleInstance Activity實例啟動另一個Activity,那么這個Activity實例會放入其他的Task中。同理,如果singleInstance Activity被別的Activity啟動,它也會放入不同于調用者的Task中。
其他
Intent Flags
除了在manifest文件中設置launchMode之外,還可以在Intnet中設置flag達到同樣的效果。如下述代碼就可以讓StandardActivity已singleTop模式啟動。
Intent intent = new Intent(StandardActivity.this, StandardActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); startActivity(intent);備注
這四種模式在 Android 5.0 之前及之后、跨程序啟動可能略有不同,可自己查找資料或查看下面的原文鏈接
原文 《Understand Android Activity’s launchMode: standard, singleTop, singleTask and singleInstance》
總結
以上是生活随笔為你收集整理的Android Activity Launch Mode 启动模式详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Gson 字符串与对象相互转换工具类
- 下一篇: Android Java 代码设置 la