99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Android Activity啟動(dòng)模式的詳解

Dbwd_Imgtec ? 來(lái)源:未知 ? 作者:李倩 ? 2018-04-18 15:47 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1、任務(wù)棧(Task)

若干個(gè)Activity的集合的棧表示一個(gè)Task。

棧不僅僅只包含自身程序的Activity,它也可以跨應(yīng)用包含其他應(yīng)用的Activity,這樣有利于保障用戶體驗(yàn),維護(hù)用戶操作體驗(yàn)上的完整性。

例如:微信ActivityA 分享文章到QQActivityB,兩個(gè)activity是存在于不同app中的,但是被系統(tǒng)放在一個(gè)任務(wù)中,分享后,用戶按back鍵返回,可以返回到原來(lái)的微信Activity A中,這就確保了用戶體驗(yàn)。

2、查看當(dāng)前系統(tǒng)的任務(wù)棧

命令行中 -- > adb shell dumpsys activity

3、Activity 的相關(guān)屬性

android:taskAffinity:是否定義了該屬性,對(duì)接下來(lái)討論到的singleTask影響甚大,如果設(shè)置了Activity的taskAffinity屬性值,Activity將在TaskName為指定值的獨(dú)立Task中啟動(dòng),否則,將在原來(lái)的默認(rèn)Task中。

android:allowTaskReparenting:主要作用是activity的遷移,程序A已經(jīng)啟動(dòng)了若干個(gè)Activity,其中包含Activity1(這個(gè)Activity1擁有該屬性),當(dāng)程序B也要啟動(dòng)它的時(shí)候,其可遷移到程序B內(nèi)。

android:alwaysRetainTaskState:操作系統(tǒng)會(huì)在程序長(zhǎng)時(shí)間不會(huì)動(dòng)的時(shí)候,清除Task狀態(tài),如果開啟這個(gè),系統(tǒng)會(huì)繼續(xù)保持直到再次打開,只對(duì)根Activity生效(ABC,A是棧底,C是棧頂,只能對(duì)A即可)。例如微信在后臺(tái),當(dāng)我們?cè)俅未蜷_應(yīng)用時(shí),系統(tǒng)會(huì)判斷是否已經(jīng)存在以A為根Activity的棧,如果有,直接使用該棧,并顯示棧頂?shù)腁ctivity。

android:clearTaskOnLaunch:用來(lái)標(biāo)記是否在啟動(dòng)該Activity時(shí),清除除根目錄的其他Activity

android:exported:是否支持其它應(yīng)用調(diào)用當(dāng)前組件。默認(rèn)值:包含有intent-filter 默認(rèn)值為true(); 沒(méi)有intent-filter默認(rèn)值為false。

四種啟動(dòng)模式:

standard:每次激活A(yù)ctivity時(shí)(startActivity),都創(chuàng)建Activity實(shí)例,并放入任務(wù)棧;

singleTop:如果該Activity位于任務(wù)棧棧頂,則不需要?jiǎng)?chuàng)建,復(fù)用實(shí)例并且會(huì)調(diào)用該實(shí)例的onNewIntent()方法將Intent對(duì)象傳遞到這個(gè)實(shí)例中,其余情況都要?jiǎng)?chuàng)建Activity實(shí)例;(singleTop模式,只在當(dāng)前任務(wù)棧中生效、startActivityForResult啟動(dòng)一個(gè)設(shè)置了singleTop的activity,singleTop模式將無(wú)效)

關(guān)于onNewIntent():根據(jù)文檔知,當(dāng)Activity的啟動(dòng)模式是singleTop或者使用FLAG_ACTIVITY_SINGLE_TOP這個(gè)標(biāo)記啟動(dòng)新的Activity并且Activity棧頂就是待啟動(dòng)的Activity的時(shí)候,會(huì)調(diào)用原Activity的這個(gè)方法;例子:QActivity為棧頂復(fù)用模式,當(dāng)Qactivity位于棧頂時(shí),再次打開,onResume() -- >onPause() -- >onNewIntent() -- >onResume() 。當(dāng)Qactivity不位于棧頂時(shí),onNewIntent-- >onRestart-- >onStart-- >onResume(也就是說(shuō)只要棧頂不是Qactivity ,都會(huì)創(chuàng)建新的實(shí)例,是Qactivity則重用不新建)。

singleTask:使用好棧內(nèi)復(fù)用模式對(duì)taskAffinity屬性的理解很重要。

存在相同taskAffinity屬性值的Task:不存在實(shí)例,則新建Activity實(shí)例。如果存在則把當(dāng)前實(shí)例中復(fù)用實(shí)例, 這個(gè) Activity 啟動(dòng)并且清除頂部的 Acitivity ,通過(guò)標(biāo)識(shí) CLEAR_TOP。

taskAffinity屬性值不一樣的Task:在這個(gè) Task 中新建這個(gè) Activity 實(shí)例。

singleInstance:和singleTask差不多,唯一不同的是singleInstance Activity實(shí)例的Task只能存放一個(gè)該模式的Activity實(shí)例,例如Qactivity加載Wactivity都會(huì)被放入其它的Task中,如果存在與Wactivity相同affinity的Task,則在該Task內(nèi)創(chuàng)建Wactivity。如果不存在,則重新生成新的Task并入棧。

常用Intent Flags:

FLAG_ACTIVITY_NEW_TASK:如果task中已經(jīng)有了你要啟動(dòng)的activity的話,當(dāng)前task會(huì)被帶到前臺(tái)(不管這個(gè)activity是否在前臺(tái),有可能activity上邊還壓有別的activity)。如果配合FLAG_ACTIVITY_NEW_MULTI_TASK,則無(wú)論什么情況都會(huì)創(chuàng)建新的Task,就成了類似 singleInstance 的情況了。如果配合 FLAG_ACTIVITY_CLEAR_TASK,則會(huì)先清空該棧,然后向棧中添加目標(biāo)Activity,棧ID不變。

例如:Flag為FLAG_ACTIVITY_NEW_TASK,Qactivity(棧為L(zhǎng)OL)啟動(dòng)Wactivity(棧為DOTA),接著啟動(dòng)Eactivity(棧為DOTA),Home回桌面。打開該應(yīng)用,Qactivity啟動(dòng)Wactivity,Eactvity會(huì)出現(xiàn)在前臺(tái),因?yàn)樗钦麎K棧啟動(dòng)(里面順序不變)。

FLAG_ACTIVITY_SINGLE_TOP:相當(dāng)于launchMode中的singleTop。

FLAG_ACTIVITY_CLEAR_TOP:與singleTask類似,但有極大區(qū)別,它會(huì)銷毀目標(biāo)Activity和它之上的所有Activity,重新創(chuàng)建目標(biāo)Activity,并沒(méi)有執(zhí)行onNewIntent()。

tips:指定啟動(dòng)模式時(shí),F(xiàn)lags的優(yōu)先級(jí)大于launchMode,當(dāng)兩者都有時(shí),以Intent Flag有效。

注意事項(xiàng):

1、當(dāng)目標(biāo)的啟動(dòng)模式不為標(biāo)準(zhǔn)模式時(shí),不要使用startActivityForResult去啟動(dòng)目標(biāo),容易出現(xiàn)你意想不到的結(jié)果。

例如:(大概意思,startActivityForResult相當(dāng)于白設(shè)置,會(huì)返回一個(gè)取消的結(jié)果)

2、當(dāng)Activity執(zhí)行了onDestroy,沒(méi)有執(zhí)行finish,那么實(shí)例都還是存在棧里的。但Activity被finish掉了,則它會(huì)是新建實(shí)例重新入棧,不會(huì)按啟動(dòng)模式想的那樣。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Android
    +關(guān)注

    關(guān)注

    12

    文章

    3973

    瀏覽量

    130246

原文標(biāo)題:詳解Android Activity啟動(dòng)模式

文章出處:【微信號(hào):Imgtec,微信公眾號(hào):Imagination Tech】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    #硬聲創(chuàng)作季 Android應(yīng)用開發(fā):Activity啟動(dòng)模式

    AndroidAct
    Mr_haohao
    發(fā)布于 :2022年11月02日 22:50:14

    Android系統(tǒng)與應(yīng)用開發(fā)內(nèi)容介紹

    并在設(shè)備上運(yùn)行本實(shí)驗(yàn)通過(guò)IDE中啟動(dòng)模擬器并通過(guò)模擬器進(jìn)行斷點(diǎn)調(diào)試,并對(duì)項(xiàng)目的整體架構(gòu)有簡(jiǎn)單的了解。 第二階段 11.Android應(yīng)用剖析(上)12.Activity 1)Activity
    發(fā)表于 07-13 14:03

    Android系統(tǒng)與應(yīng)用開發(fā)培訓(xùn)班

    運(yùn)用Android的安全模式。 要求 本課程面向希望把握3G歷史性機(jī)遇,成為3G移動(dòng)互聯(lián)網(wǎng)緊缺人才,并擁有一年以上軟件開發(fā)經(jīng)驗(yàn)或計(jì)算機(jī)相關(guān)專業(yè)碩士學(xué)歷(包括在讀),同時(shí)具備Java語(yǔ)言基礎(chǔ)的開發(fā)者
    發(fā)表于 03-23 14:12

    [資料分享]+Android從入門到精通

    1.2 Android簡(jiǎn)介1.2.1 Andriod的歷史1.2.2 Andriod的未來(lái)1.2.3 Andriod平臺(tái)的技術(shù)架構(gòu)1.3 Android應(yīng)用程序構(gòu)成1.3.1 活動(dòng)(Activity)1.3.2 意圖
    發(fā)表于 09-26 09:53

    Android的Intent該怎么使用?

    Intent 是 Android 應(yīng)用程序組件之間啟動(dòng),通信的一個(gè)對(duì)象。舉個(gè)例子,Android 中的頁(yè)面 Activity 之間互相跳轉(zhuǎn),就需要通過(guò) Intent 對(duì)象來(lái)完成。不止
    發(fā)表于 09-12 09:05

    迅為i.MX6Q開發(fā)板Android啟動(dòng)APP

    本文檔將講解迅為i.MX6Q開發(fā)板如何讓 APP 在系統(tǒng)運(yùn)行時(shí)自啟動(dòng),我們先新建一個(gè)工程名為 autorun 的空工程,或者大家可以自行選擇想要啟動(dòng)的 App 工程。我們要讓 app 在開機(jī)之后自動(dòng)
    發(fā)表于 04-08 14:33

    第13章Activity、Intent和Service系統(tǒng)結(jié)

    13.1 Java語(yǔ)言編程基礎(chǔ) 13.2 Android應(yīng)用程序組件 13.3 Activity 13.4 Intent 13.5 Service 13.6 對(duì)話框 13.7 Android 程序命周期
    發(fā)表于 04-11 14:44 ?0次下載

    Android開發(fā)手冊(cè)—API函數(shù)詳解

    Android開發(fā)手冊(cè)—API函數(shù)詳解
    發(fā)表于 10-17 09:01 ?13次下載
    <b class='flag-5'>Android</b>開發(fā)手冊(cè)—API函數(shù)<b class='flag-5'>詳解</b>

    基于Android開發(fā)手冊(cè)—API函數(shù)詳解

    基于Android開發(fā)手冊(cè)—API函數(shù)詳解
    發(fā)表于 10-24 09:06 ?18次下載
    基于<b class='flag-5'>Android</b>開發(fā)手冊(cè)—API函數(shù)<b class='flag-5'>詳解</b>

    如何進(jìn)行Android中Task任務(wù)棧的分配

    只是針對(duì)Activity而言的。 Activity有不同的啟動(dòng)模式, 可以影響到task的分配 Task,簡(jiǎn)單的說(shuō),就是一組以棧的模式聚集在
    發(fā)表于 07-03 17:42 ?0次下載
    如何進(jìn)行<b class='flag-5'>Android</b>中Task任務(wù)棧的分配

    androidActivity應(yīng)用

    androidActivity應(yīng)用(電力電子電源技術(shù)及應(yīng)用課后答案)-androidActivity應(yīng)用,有需要的可以參考!
    發(fā)表于 08-31 13:22 ?1次下載
    <b class='flag-5'>android</b>的<b class='flag-5'>Activity</b>應(yīng)用

    android-Activity

    android-Activity(深圳普德新星電源技術(shù)有限公司怎樣)-android-Activity,有需要的可以參考!
    發(fā)表于 08-31 15:51 ?1次下載
    <b class='flag-5'>android-Activity</b>

    Android開發(fā)—使用ActivityGroup來(lái)切換Activity和Layout

    Android開發(fā)—使用ActivityGroup來(lái)切換Activity和Layout(ups電源技術(shù)參數(shù))-該文檔為Android開發(fā)—使用ActivityGroup來(lái)切換Activity
    發(fā)表于 09-27 15:36 ?3次下載
    <b class='flag-5'>Android</b>開發(fā)—使用ActivityGroup來(lái)切換<b class='flag-5'>Activity</b>和Layout

    Activity初學(xué)乍練

    本節(jié)開始講解Android的四大組件之一的Activity(活動(dòng)),先來(lái)看下官方對(duì)于Activity的介紹:PS:官網(wǎng)文檔:Activity
    的頭像 發(fā)表于 04-01 22:28 ?2106次閱讀
     <b class='flag-5'>Activity</b>初學(xué)乍練

    帶大家探究Activity啟動(dòng)前的一項(xiàng)重要的工作—棧校驗(yàn)

    本文從一例業(yè)務(wù)中遇到的問(wèn)題出發(fā),以FLAG_ACTIVITY_NEW_TASK這一flag作為切入點(diǎn),帶大家探究Activity啟動(dòng)前的一項(xiàng)重要的工作——棧校驗(yàn)。
    的頭像 發(fā)表于 04-19 09:36 ?1000次閱讀