国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Activity啟動模式及應用

YFan / 3537人閱讀

摘要:模式所有都在同一個棧中。啟動時,如果該實例已經存在于棧頂,則復用該實例否則,生成一個新的實例。二重要的啟動標識通過代碼實現啟動模式。聯合使用清空當前棧。如果在發現登陸過期,需要重新登錄,并且登陸后需要重新進入主頁面相當于全部重新啟動一遍。

一、Activity四種啟動模式

這4種啟動模式都是通過在manifest中注冊實現的。

standard模式:所有activity都在同一個task棧中。每次啟動activity,都會生成一個新的activity實例。
singleTop模式:所有activity都在同一個task棧中。啟動activity時,如果該activity實例已經存在于棧頂,則復用該activity實例;否則,生成一個新的activity實例。
singleTask模式:所有activity都在同一個task棧中。啟動activity時,如果該activity實例已經存在于棧中,則復用該activity實例,同時彈出該activity上面的所有實例;否則,生成一個新的activity實例。
singleInstance模式:會在一個新的task棧中啟動該activity實例,且這個棧中有且只能有這一個activity實例。

二、Activity重要的啟動標識

通過代碼實現啟動模式。

Intent intent = new Intent();
intent.setClass(context, DemoActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
context.startActivity(intent);

Intent.FLAG_ACTIVITY_NEW_TASK:在一個新的task棧中啟動activity,但是并不是一定會在一個新的task棧中啟動activity。如果系統為該activity找到一個極具親和力(taskAffinity的值相等)的task棧,就不會在新的task棧中啟動Activity。
Intent.FLAG_ACTIVITY_CLEAR_TOP:清空當前task棧中,該activity之上的所有activity實例,當前activity是否會重新onCreate,取決于是否與Intent.FLAG_ACTIVITY_SINGLE_TOP標記連用。
Intent.FLAG_ACTIVITY_SINGLE_TOP:只用Intent.FLAG_ACTIVITY_CLEAR_TOP當前Activity會重新onCreate,Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP組合使用,當前Activity不會重新onCreate。
Intent.FLAG_ACTIVITY_CLEAR_TASK:清空當前task棧中,所有activity實例。
Intent.FLAG_ACTIVITY_CLEAR_TASK+Intent.FLAG_ACTIVITY_NEW_TASK聯合使用:清空當前task棧。然后在一個新的task棧中啟動activity,但是并不是一定會在一個新的task棧中啟動activity。如果系統為該activity找到一個極具親和力(taskAffinity的值相等)的task棧,就不會在新的task棧中啟動Activity。
Intent.FLAG_ACTIVITY_CLEAR_TOP+Intent.FLAG_ACTIVITY_NEW_TASK聯合使用:清空當前task棧中,該activity之上的所有activity實例。然后在一個新的task棧中啟動activity,但是并不是一定會在一個新的task棧中啟動activity。如果系統為該activity找到一個極具親和力(taskAffinity的值相等)的task棧,就不會在新的task棧中啟動Activity。

三、task棧與task棧之間的關系

假如有3個task棧,task1中包含activity1,task2中包含activity2,task3中包含activity3和activity4,假如task1、task2、task3的位置關系是,task3位于頂部。
只有最上層task棧中的activity有啟動別的activity的權限:上述例子中,activity3和activity4可以啟動別的activity,activity1和activity2無法啟動別的activity。
頂層activity所在棧一定位于頂部:上述例子中,假如activity3啟動了activity1,那么task1將被提到頂部。activity1可以啟動別的activity,activity2、activity3和activity4無法啟動別的activity。

四、taskAffinity屬性

taskAffinity用于標記當前activity應該屬于哪個task棧:如果activity沒有指定taskAffinity的值,那么就等于application的taskAffinity的值,如果application也沒有指定,那么taskAffinity的值就等于包名。
默認情況下,Intent.FLAG_ACTIVITY_NEW_TASK不會在新的task棧中啟動activity:因為能找到一個極具親和力的task棧,默認情況下,activity的taskAffinity值都等于包名。
activity重新宿主:如果application1的activity1與application2的activity2的taskAffinity值相等,且application1的activity1的allowTaskReparenting設置為true。啟動activity1后退到后臺,再啟動activity2時,activity1會重新宿主,也就是說會先看到activity1。

五、應用場景

LoginActivity->HomeActivity->ActivityA->ActivityB
假設從登陸頁面(登錄后頁面finish),跳轉到主頁面,再跳轉到ActivityA,再跳轉到ActivityB。如果在ActivityB發現登陸過期,需要重新登錄,并且登陸后需要重新進入主頁面(相當于全部重新啟動一遍)。
方案一:可以把HomeActivity設置為singleTask。
方案二:可以使用Intent.FLAG_ACTIVITY_CLEAR_TASK。
方案三:可以使用Intent.FLAG_ACTIVITY_CLEAR_TOP。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/69039.html

相關文章

  • 金三銀四,2019大廠Android高級工程師面試題整理

    摘要:原文地址游客前言金三銀四,很多同學心里大概都準備著年后找工作或者跳槽。最近有很多同學都在交流群里求大廠面試題。 最近整理了一波面試題,包括安卓JAVA方面的,目前大廠還是以安卓源碼,算法,以及數據結構為主,有一些中小型公司也會問到混合開發的知識,至于我為什么傾向于混合開發,我的一句話就是走上編程之路,將來你要學不僅僅是這些,豐富自己方能與世接軌,做好全棧的裝備。 原文地址:游客kutd...

    tracymac7 評論0 收藏0
  • Android 2019最新面試實戰總結

    摘要:內存泄漏當應用內部不再需要某個實例后,但是這個對象卻仍然被引用,這個情況就叫做內存泄露。安卓虛擬機為每一個應用分配一定的內存空間,當內存泄露到達一定的程度就會造成內存溢出。點擊登錄跳轉頁面中所有操作都與用戶密切相關,是 Android: 今日頭條屏幕適配的原理? 1:首先計算出 density,計算公式:當前設備屏幕總寬度(單位為像素)/ 設計圖總寬度(單位為 dp) = densit...

    Caicloud 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<