本地安裝apk後直接打開,按下Home鍵再從新打開,而後按下返回鍵時頁面展現錯誤的處理方法

情景:app

一、下載apk到手機本地,點擊本地apk開始安裝spa

二、安裝完成後,通常會有 「完成」 和 「打開」 兩個按鈕,點擊 「完成」 按鈕時是沒有問題的,無論它code

三、點擊 「打開」 按鈕,進入到首頁(好比MainActivity),打開其餘頁面(好比GameActivity),而後按下Home鍵blog

四、返回桌面後,再次點擊桌面上的app圖標get

  • 咱們的指望是:從新打開app以後,應該能看到 GameActivity 頁面
  • 然而事實是:從新打開app以後,展現的是 MainActivity,當點擊返回時,纔看到GameActivity。也就是說,從新啓動應用後,以前的頁面也沒有被kill掉,至關於打開了兩個相同的應用。第一感受就是 onCreate() 方法被反覆調用,onResume() 沒發揮做用。

 

解決方法:it

  網上都是說將第二個頁面的launchMode屬性設置爲singleTask,好比說有兩個頁面,第一個是登陸界面,第二個爲主界面,將主界面的啓動模式設置爲singleTask,這樣雖然按照以前的操做流程,在第二次打開應用,進到主界面的時候,只有一個,可是這樣每次都要到登陸界面再到主界面,狀況雖然有所改善,但仍是沒有完美解決。io

下面介紹一種比較好的處理方法:class

1 protected void onCreate(Bundle savedInstanceState) {  
2        super.onCreate(savedInstanceState);  
3        int flag=getIntent().getFlags();  
4        System.out.println("getFlags---"+flag+"------"+(flag&Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT));  
5        if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {    
6                 finish();  
7                 return;  
8            }  
9     }  

   在手機上按照情景描述那樣操做,能看到下面的輸出。第一行表示正常打開時 flag 標誌是268435456,Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT 標誌是0;第二行表示從新打開app的結果,很明顯 Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT 標誌再也不是0,因此咱們在setContentView()以前直接finish掉它或者執行onResume()方法來恢復以前的頁面。test

 

  另外也能夠檢查一下另外一個標誌:FLAG_ACTIVITY_RESET_TASK_IF_NEEDED。這個沒使用過,沒什麼體會,僅供參考吧!登錄

 

參考資料:How to return to the latest launched activity when re-launching application after pressing HOME

相關文章
相關標籤/搜索