啟動模式~~按home回到桌面,然后再次點擊APP圖標,就需要重新登錄

今天項目中遇到一個存在已久的問題,當app登錄之后,按home回到桌面,然后再次點擊APP圖標,就需要重新登錄.

目前已經(jīng)解決,寫這個用來備忘.

為了解決這個問題,第一個想法是禁用掉三大金剛鍵,但是找來找去,也就返回鍵可以攔截,home和任務鍵只有改底層才能徹底解決.

于是,再次看了一遍activity啟動模式,決定從啟動模式來解決這個BUG.

標準啟動模式,即,standard

這是系統(tǒng)默認的啟動模式,即:不用再在AndroidManifest.xml配置的android:launchMode。

作用:標準模式下,只要用intent 跳轉,系統(tǒng)會自動創(chuàng)建一個新的activity實例,并且放在棧頂。按下回退鍵,系統(tǒng)會從頂部開始一個一個清除Activity。

singleTop

作用:singleTop模式下,如果要跳轉的activity的實例已經(jīng)在棧中存在,看其是否位于棧頂,如果位于棧頂,則直接啟用舊的,不在創(chuàng)建實例,如果不在棧頂,則創(chuàng)建一個新的實例。

singleTask

作用:如果要啟動的activity的實例不存在,則創(chuàng)建一個新的實例。如果要啟動activity的實例在棧中已經(jīng)存在,則清除此activty舊實例以上的所有activity,啟動舊activity的實例并且至于棧頂,開始執(zhí)行OnResum()方法。

singleInstance

作用:系統(tǒng)會重新啟用一個棧,并且把這個activity放入新的棧中,并且保證不會再讓其他的activity進入。再次跳轉該activity,activity如果存在則直接啟用,不存在創(chuàng)建新的。

注意:5.0以上的部分手機,一個應用存在多個棧的情況下,切到后臺,后臺會出現(xiàn)多個后臺同一個應用的界面,這是因為界面不在同一個棧中。

single 是唯一的,僅僅只有一個的意思,task是伴隨著AC生成的管理AC的對象,一個task可以管理多個AC,Instance是實例的意思,不過多解釋.

標準模式對系統(tǒng)消耗太大,一半不考慮,但是這個BUG卻可以在使用標準模式后解決.

所以,繼續(xù)往下看,尋找有沒有更好的辦法.

singleTop,如果在任務的棧頂正好存在該Activity的實例, 就重用該實例,否者就會創(chuàng)建新的實例并放入棧頂(即使棧中已經(jīng)存在該Activity實例,只要不在棧頂,都會創(chuàng)建實例)。

singleTask,此啟動模式和singleTop在名字上即可看出區(qū)別,即singleTop每次只檢測當前棧頂?shù)腁ctivity是否是我們需要請求創(chuàng)建的,而singleTask則會檢測棧中全部的Activity對象,從上向下,如果檢測到是我們所請求的則會消滅此Activity對象上面的對象,直接把檢測到的我們需要的Activity置為棧頂。并不會重新創(chuàng)建AC,所以大多數(shù)時候用的都是這種啟動模式.

但是我的APP中所有的AC用的也是這個啊,為什么還是不行,究其原因,入口,還是入口問題,如果入口AC設置的是singleTask,但是在創(chuàng)建過多個AC之后,如果入口AC被銷毀了,巧妙設置Activity的啟動模式才會節(jié)省系統(tǒng)開銷和程序運行效率。

但是兼顧這個BUG ,我在此做出的操作是,把入口改為標準啟動模式standard,其他AC設置為singleTask,這樣會兼顧系統(tǒng)開銷和程序運行效率.

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容