在項目開發中遇到一個問題,打開應用進入到某個頁面,按下home鍵后再次進入應用時,總是進入啟動頁而不是之前的頁面,如果按返回鍵就是進入到之前的頁面,這樣用戶體驗很不好,網上主要介紹了兩種解決方法。
1、在AndroidManifest.xml文件中對LoginActivity和MainActivity設置啟動模式為singleTask,即在activity下加入以下代碼:android:launchMode="singleTask";
2、在打開應用最先啟動的activity的onCreate()方法的setContentView()方法之前加入以下代碼:
if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {
finish();
return;
}
第一種方法沒能解決掉問題,第二種方法解決了。
第二種方法的原理:
正常情況下,打開應用啟動A頁面,再跳轉到B頁面,然后按下home鍵再進入應用,會重新創建A頁面,此時A頁面在B頁面的上面,所以也就出現了問題描述中“如果按返回鍵就是進入到之前的頁面”的情況;
加入判斷后,再打開app,還會重新創建A頁面,但是此時會判斷一下,這時A頁面不是在棧底,所以finish掉,然后露出下面的B頁面。
2020.1.20更新:繼上一次改動之后,這個突然又出現了,在網上搜了下,還是只有兩種呼聲,第二種答案就是目前所用的,但問題又出現了,所以又試了下另一種,就是去AndroidManifest文件中將第一啟動的頁面的lanuchmode(頁面啟動模式)去掉,我之前是設置為了singleTask模式。bug復現的原因就是在某一次更新中我把啟動頁的模式設置成singleTask。
保險起見兩種方法都寫在代碼里吧,就是:
1、在AndroidManifest文件中,啟動頁(初次進入的頁面)不要設置android:launchMode="singleTask"
屬性,如果有了就去掉;
2、在啟動頁activity的onCreate()方法里的setContentView()方法之前加上以下代碼:
if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {
finish();
return;
}