成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

每日一道面試題(第4期)---launchMode的應(yīng)用場(chǎng)景

xeblog / 1529人閱讀

摘要:每次啟動(dòng)一個(gè),都會(huì)創(chuàng)建一個(gè)新的實(shí)例放在棧頂。這時(shí)會(huì)移除此實(shí)例上的所有實(shí)例,使此實(shí)例置于棧頂,并復(fù)用此實(shí)例,回調(diào)方法也就是說(shuō)這是一種棧內(nèi)的單例模式。這種模式一般應(yīng)用于的主頁(yè),在退出應(yīng)用程序的時(shí)候不需要退出其他的,因?yàn)橹黜?yè)一般置于棧底部。

零零碎碎的東西總是記不長(zhǎng)久,僅僅學(xué)習(xí)別人的文章也只是他人咀嚼后留下的殘?jiān)?。無(wú)意中發(fā)現(xiàn)了這個(gè)每日一道面試題,想了想如果只是簡(jiǎn)單地去思考,那么不僅會(huì)收效甚微,甚至難一點(diǎn)的題目自己可能都懶得去想,堅(jiān)持不下來(lái)。所以不如把每一次的思考、理解以及別人的見解記錄下來(lái)。不僅加深自己的理解,更要激勵(lì)自己堅(jiān)持下去。

launchMode簡(jiǎn)介 what(是什么)

是Activity的一種配置屬性,表示Activity由哪種方式啟動(dòng)

how(怎么用)

有兩種配置方式:

在manifest清單文件中配置默認(rèn)啟動(dòng)屬性。

在java代碼中,啟動(dòng)Activity時(shí)指定啟動(dòng)方式,通過(guò)inent.addFlags()方法,這里面常用的有四種。

Intent.FLAG_ACTIVITY_NEW_TASK

Intent.FLAG_ACTIVITY_SINGLE_TOP

Intent.FLAG_ACTIVITY_CLEAR_TOP

Intent.FLAG_ACTIVITY_CLEAN_TASK

具體的使用以及各種搭配使用說(shuō)明可以看這個(gè)Android 之Activity啟動(dòng)模式(二)之 Intent的Flag屬性,寫的很詳細(xì)。

why(為什么需要)

在不同的場(chǎng)景考慮到不同形式的Activity實(shí)例的復(fù)用,選擇不同的加載方式。

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

介紹啟動(dòng)模式前,我們先來(lái)了解下Android的Activity管理機(jī)制。

Android采用Task來(lái)管理多個(gè)Activity,當(dāng)我們啟動(dòng)一個(gè)應(yīng)用時(shí),Android就會(huì)為之創(chuàng)建一個(gè)Task,然后就是啟動(dòng)這個(gè)應(yīng)用程序的入口Activity,并將實(shí)例放入Task。

Android并沒(méi)有為Task提供任何的API,我們無(wú)法真正的訪問(wèn)Task,只有一個(gè)getTaskId方法獲得所在Task的Id。Task通過(guò)棧的方式管理Activity實(shí)例,包括先進(jìn)后出、入棧出棧方式都是一樣的。

standard模式

默認(rèn)的啟動(dòng)模式。每次啟動(dòng)一個(gè)Activity,都會(huì)創(chuàng)建一個(gè)新的Activity實(shí)例放在Task棧頂。這個(gè)Task棧是啟動(dòng)新的Activity的Activity所在的Task棧。那么這時(shí)候就會(huì)有特殊的情況,如果是service或者Application啟動(dòng)的Activity,并沒(méi)有Task棧,這時(shí)就需要我們通過(guò)addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)指定標(biāo)記,創(chuàng)建一個(gè)新的Task。

app的大多數(shù)Activity皆采用這種啟動(dòng)模式。作為開發(fā)者,我們考慮到的就是用戶在操作每個(gè)頁(yè)面后,即使之間有重復(fù)的界面,按回退鍵也可以按照剛剛操作的順序回退。

singleTop模式

這種模式存在兩種情況:

Task棧頂不是要啟動(dòng)的Activity實(shí)例,這時(shí)和standard模式?jīng)]有區(qū)別

Task棧頂是要啟動(dòng)的Activity實(shí)例,那么就會(huì)復(fù)用這個(gè)實(shí)例,并且回調(diào)該Activity的onNewIntent方法。由于不會(huì)創(chuàng)建Activity實(shí)例,所以不會(huì)回調(diào)其他方法。

一般應(yīng)用于通知詳情頁(yè)或者聊天界面,即通過(guò)點(diǎn)擊通知欄消息進(jìn)入Activity??梢员苊庥卸啻瓮ㄖ⑼ㄟ^(guò)點(diǎn)擊而產(chǎn)生較多Activity實(shí)例。增強(qiáng)Activity的復(fù)用性。

singleTask

這種模式有三種情況。

Task棧中不存在要啟動(dòng)的Activity實(shí)例,這時(shí)和standard模式?jīng)]有任何區(qū)別

Task棧中存在要啟動(dòng)的Activity實(shí)例,且此實(shí)例在棧頂,這時(shí)和singleTop模式?jīng)]有區(qū)別

Task棧中存在要啟動(dòng)的Activity實(shí)例,且此實(shí)例不在棧頂。這時(shí)會(huì)移除此實(shí)例上的所有Activity實(shí)例,使此實(shí)例置于Task棧頂,并復(fù)用此實(shí)例,回調(diào)onNewIntent方法

也就是說(shuō)這是一種棧內(nèi)的單例模式。這種模式下還可以通過(guò)manifest文件中的taskAffinity屬性來(lái)指定要加載的Task棧。

".activitys.MainActivity"
    android:launchMode="singleTask"
    android:taskAffinity="com.gl.task"/>

關(guān)于taskAffinity的值:每個(gè)Activity都有taskAffinity屬性,這個(gè)屬性指出了它希望進(jìn)入的Task。如果一個(gè)Activity沒(méi)有顯式的指明該Activity的taskAffinity,那么它的這個(gè)屬性就等于Application指明的taskAffinity,如果Application也沒(méi)有指明,那么該taskAffinity的值就等于包名。

這種模式一般應(yīng)用于app的主頁(yè),在退出應(yīng)用程序的時(shí)候不需要退出其他的Activity,因?yàn)橹黜?yè)一般置于Task棧底部?;蛘咴擁?yè)面可能會(huì)被其他應(yīng)用程序喚醒,比如瀏覽器首頁(yè)。

singleInstance模式

這種模式算是一種全局的單例模式,即只要有任何一個(gè)棧存在此Activity實(shí)例,就會(huì)復(fù)用此實(shí)例,回調(diào)onNewIntent方法。如果此實(shí)例不存在,那么就會(huì)創(chuàng)建新的Task棧,并放入Activity實(shí)例。

也就是說(shuō),這種模式下的Activity實(shí)例只有兩種形式。

不存在此實(shí)例

存在此實(shí)例,且只在一個(gè)Task棧中并且該Task中只有該實(shí)例

這種模式一般應(yīng)用于鬧鐘響鈴界面、撥打接聽電話界面等系統(tǒng)界面,確保此Activity實(shí)例只能存在一個(gè)。 常應(yīng)用于獨(dú)立棧操作的應(yīng)用,如鬧鐘的提醒頁(yè)面,當(dāng)你在A應(yīng)用中看視頻時(shí),鬧鐘響了,你點(diǎn)擊鬧鐘提醒通知后進(jìn)入提醒詳情頁(yè)面,然后點(diǎn)擊返回就再次回到A的視頻頁(yè)面,這樣就不會(huì)過(guò)多干擾到用戶先前的操作了。

另外啟動(dòng)其他應(yīng)用程序中的Activity的操作,在5.0之前新啟動(dòng)的Activity實(shí)例會(huì)放入啟動(dòng)的Intent所在的Task棧內(nèi),雖然他們并不屬于同一應(yīng)用程序。這好像并不怎么合理,所以在5.0后會(huì)創(chuàng)建一個(gè)新的Task棧存放外部應(yīng)用程序的Activity實(shí)例

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/7187.html

相關(guān)文章

  • 每日一道面試1)---自定義handler如何有效保證內(nèi)存泄漏問(wèn)

    摘要:但是如果你直接創(chuàng)建一個(gè)對(duì)象,然后重寫內(nèi)部方法,那么一定會(huì)提醒你會(huì)有內(nèi)存泄漏的可能。所以當(dāng)?shù)纳芷诮Y(jié)束后,而中還存在未處理的消息,那么上面一連串的引用關(guān)系就不允許的對(duì)象被回收,就造成了內(nèi)存泄漏。 零零碎碎的東西總是記不長(zhǎng)久,僅僅學(xué)習(xí)別人的文章也只是他人咀嚼后留下的殘?jiān)?。無(wú)意中發(fā)現(xiàn)了這個(gè)每日一道面試題,想了想如果只是簡(jiǎn)單地去思考,那么不僅會(huì)收效甚微,甚至難一點(diǎn)的題目自己可能都懶得去想,堅(jiān)持不下...

    番茄西紅柿 評(píng)論0 收藏0
  • 每日一道面試)---一般什么情況下會(huì)導(dǎo)致內(nèi)存泄漏問(wèn)

    摘要:顯而易見的,當(dāng)這個(gè)是的時(shí),就不存在內(nèi)存泄漏的問(wèn)題。這個(gè)我在第一期自定義如何有效保證內(nèi)存泄漏問(wèn)題已經(jīng)說(shuō)得很明白了。 零零碎碎的東西總是記不長(zhǎng)久,僅僅學(xué)習(xí)別人的文章也只是他人咀嚼后留下的殘?jiān)?。無(wú)意中發(fā)現(xiàn)了這個(gè)每日一道面試題,想了想如果只是簡(jiǎn)單地去思考,那么不僅會(huì)收效甚微,甚至難一點(diǎn)的題目自己可能都懶得去想,堅(jiān)持不下來(lái)。所以不如把每一次的思考、理解以及別人的見解記錄下來(lái)。不僅加深自己的理解,更要激...

    番茄西紅柿 評(píng)論0 收藏0
  • 實(shí)用性前端知識(shí) - 收藏集 - 掘金

    摘要:與面向?qū)ο缶幊塘蠓较蛑阃黄魄岸松钠脚_(tái)期前端掘金無(wú)論我們從事何種職業(yè),在職業(yè)生涯的某個(gè)階段,都或多或少會(huì)遇到所謂的平臺(tái)期。目前為止,已經(jīng)有個(gè)用戶通過(guò)認(rèn)證登觀點(diǎn)年前端初學(xué)者的生存指南前端掘金逝者如斯夫,不舍晝夜。 你可能聽說(shuō)過(guò)函數(shù)式編程(Functional programming),甚至已經(jīng)使用了一段時(shí)間。 但是,你能說(shuō)清楚,它到底是什么嗎? 網(wǎng)上搜索一下,你會(huì)輕松找到好多答案...

    Honwhy 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<