天天看點

下載下傳完點選“打開應用”後,按HOME鍵回到桌面,再次點選應用,沒有回到之前的頁面,而是打開新的應用

情景再現:在開發的時候,一般安裝替換原來的應用,打開應用是不會發生這個問題的,而是當我們從下載下傳連結下載下傳應用,下載下傳完成後,一般系統會有“完成”和“直接打開”兩個選項。如果點選“完成”,應用是正常運作的,不會出現标題所說的問題;而當點選“直接打開”,問題就來了,打開應用之後,随便弄點操作,然後按HOME鍵,回到桌面,一般情況下,我們再點選桌面應用圖示,是會回到按HOME之前的頁面,然而這次它并不是朝我們預想的方向走,你打開應用後會發現,它不是回到之前的頁面,而是啟動了新的應用,之前的頁面也沒有被kill掉,按下傳回鍵還是會回退到之前的頁面,等于是打開了兩個相同的應用!

解決方案:這個問題困擾了我很久,也查找了很多資料,也沒有得到解決(沒有找到),網上都是說将第二個頁面的launchMode屬性設定為singleTask,比如說有兩個頁面,第一個是登入界面,第二個為主界面,将主界面的啟動模式設定為singleTask,這樣雖然按照之前的操作流程,在第二次打開應用,進到主界面的時候,隻有一個,但是這樣每次都要到登入界面再到主界面,情況雖然有所改善,但還是沒有完美解決。

完美解決方案:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
           int flag=getIntent().getFlags();
	   System.out.println("getFlags---"+flag+"------"+(flag&Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT));
	   if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {
		//完美解決:APP下載下傳安裝後,點選“直接打開”,啟動應用後,按下HOME鍵,再次點選桌面上的應用,會重新開機一個新的應用問題
                finish();
                return;
           }
    }
           

就是在onCreate()内的setContentView()之前多一個判斷,日志輸出情況:

下載下傳完點選“打開應用”後,按HOME鍵回到桌面,再次點選應用,沒有回到之前的頁面,而是打開新的應用

第一個輸出,是正常打開應用的情況,第二個輸出,是按标題的操作流程進行的。

參考資料:點選打開連結、點選打開連結