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

歡迎訪問 生活随笔!

生活随笔

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

Android

Android Activity Launch Mode 启动模式详解

發(fā)布時間:2024/4/15 Android 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android Activity Launch Mode 启动模式详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

簡介

android:launchMode 屬性能設(shè)置 Activity 對象啟動時是否使用已有的實例還是多次創(chuàng)建,會使得交互設(shè)計更加良好,也能避免很多問題。
它是 Androidmanifest.xml 中 Activity 的屬性,如

<activity android:name="com.demo.activity.TripRecorderActivity"android:configChanges="keyboardHidden|orientation"android:hardwareAccelerated="false"android:label="@string/app_name"android:launchMode="singleTop"android:screenOrientation="portrait"android:windowSoftInputMode="stateHidden|stateAlwaysHidden" ></activity>

四種屬性值

簡單介紹

Activity有四種啟動模式,它們是:

  • standard: 標準模式,也是不設(shè)置時的默認模式。每次都新建一個實例對象

  • singleTop: 如果在任務(wù)棧頂發(fā)現(xiàn)了相同的實例則重用,否則新建并壓入棧頂

  • singleTask: 如果在任務(wù)棧中發(fā)現(xiàn)了相同的實例,將其上面的實例對象終止并移除,重用該實例。否則新建實例并入棧

  • singleInstance :允許不同應(yīng)用,進程線程等共用一個實例,無論從何應(yīng)用調(diào)用該實例都重用


詳細介紹

standard

這是launchMode的默認值,Activity不包含android:launchMode或者顯示設(shè)置為standard的Activity就會使用這種模式。

一旦設(shè)置成這個值,每當有一次Intent請求,就會創(chuàng)建一個新的Activity實例。。結(jié)果就是這種模式會創(chuàng)建某個Activity的多個實例。

singleTop

singleTop其實和standard幾乎一樣,使用singleTop的Activity也可以創(chuàng)建很多個實例。唯一不同的就是,如果調(diào)用的目標Activity已經(jīng)位于調(diào)用者的Task的棧頂,則不創(chuàng)建新實例,而是使用當前的這個Activity實例,并調(diào)用這個實例的onNewIntent方法。

使用場景

關(guān)于singleTop一個典型的使用場景就是搜索功能。假設(shè)有一個搜索框,每次搜索查詢都會將我們引導(dǎo)至SearchActivity查看結(jié)果,為了更好的交互體驗,我們在結(jié)果頁頂部也放置這樣的搜索框。

假設(shè)一下,SearchActivity啟動模式為standard,那么每一個搜索都會創(chuàng)建一個新的SearchActivity實例,10次查詢就是10個Activity。當我們想要退回到非SearchActivity,我們需要按返回鍵10次,這顯然太不合理了。

但是如果我們使用singleTop的話,如果SearchActivity在棧頂,當有了新的查詢時,不再重新創(chuàng)建SearchAc實例,而是使用當前的SearchActivity來更新結(jié)果。當我們需要返回到非SearchActivity只需要按一次返回鍵即可。使用了singleTop顯然比之前要合理。

singleTask

singleTask這個模式和前面提到的standard和singleTop截然不同。使用singleTask啟動模式的Activity在系統(tǒng)中只會存在一個實例。如果這個實例已經(jīng)存在,intent就會通過onNewIntent傳遞到這個Activity。否則新的Activity實例被創(chuàng)建。

同一程序內(nèi)

  • 如果系統(tǒng)中不存在singleTask Activity的實例,那么就需要創(chuàng)建這個Activity的實例,并且將這個實例放入和調(diào)用者相同的Task中并位于棧頂。如下圖

  • 如果singleTask Activity實例已然存在,那么在Activity回退棧中,所有位于該Activity上面的Activity實例都將被銷毀掉(銷毀過程會調(diào)用Activity生命周期回調(diào)),這樣使得singleTask Activity實例位于棧頂。與此同時,Intent會通過onNewIntent傳遞到這個SingleTask Activity實例。如下圖

singleInstance

這個模式和singleTask差不多,因為他們在系統(tǒng)中都只有一份實例。唯一不同的就是存放singleInstance Activity實例的Task只能存放一個該模式的Activity實例。如果從singleInstance Activity實例啟動另一個Activity,那么這個Activity實例會放入其他的Task中。同理,如果singleInstance Activity被別的Activity啟動,它也會放入不同于調(diào)用者的Task中。

其他

Intent Flags

除了在manifest文件中設(shè)置launchMode之外,還可以在Intnet中設(shè)置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》

總結(jié)

以上是生活随笔為你收集整理的Android Activity Launch Mode 启动模式详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。