1.問題描述:當APP正常啟動進入主界面后切后臺或者打開別的APP,比如用戶啟動APP后將APP切后臺同時打開Google Play,這個時候在Google Play 搜索到當前APP,點擊打開當前APP,APP會打開,但是回不到之前的界面了。
2. 問題分析:一般APP啟動流程是:
未登錄:閃屏頁SplashActivity---> 登錄頁LoginActivity---->Home主界面MainActivity?
用戶已登錄:閃屏頁SplashActivity--->Home主界面MainActivity?
當用戶通過點擊三方按鈕intent拉起來當前APP時會走帶Launcher 的 Activity,一般launcher的Activity是?SplashActivity,所以會重新走一遍上面的啟動流程。
一般APP的MainActivity會設置成:android:lauchMode="singleTask", 出現(xiàn)問題的原因就在MainActivity的啟動模式上:singleTask模式的Activity不管是位于棧頂還是棧底,再次運行這個Activity時,都會destory掉它上面的Activity來保證整個棧中只有一個自己,切記切記”這點是毋庸置疑的。
3.解決辦法:
通過點擊三方再次拉起來APP時,產(chǎn)品側(cè)希望回到之前的界面,而不是回到主界面,如果按照目前的流程重新走了一遍啟動流程,要想通過啟動流程再回到之前的界面,那就要記錄很多東西,重新跳轉(zhuǎn),這個想法是常規(guī)的想法,實現(xiàn)起來有些難度。換個方向想下,既然APP重新走啟動流程的時候,之前的界面還在棧中,只是被SplashActivity壓下去了,這個時候可以走到SplashActivity時,判斷下這個時候的棧中是否還有其他Activity,如果還有其他的Activity,就把當前的SplashActivity 關閉掉,這樣下面的Activity就到達了棧頂,這樣就恢復了之前的界面,問題完美解決。
4.代碼: SplashActivity 的 oncreate() 方法添加即可:文章來源:http://www.zghlxwxcb.cn/news/detail-802941.html
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
ImmersionBar.with(this).hideBar(BarHide.FLAG_HIDE_NAVIGATION_BAR).init()
mViewBinding = ActivitySplashBinding.inflate(layoutInflater)
setContentView(mViewBinding.root)
action = ActionController.getDeeplinkParameter(intent)
if (!isTaskRoot && (intent.extras == null) && TextUtils.isEmpty(action)) {
finish()
return
}
/**
* 后續(xù)邏輯
*/
}
?文章來源地址http://www.zghlxwxcb.cn/news/detail-802941.html
到了這里,關于Android之點擊Home鍵或者點擊Google Play 對應的APP后再次打開:導致APP重啟問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!