Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 怎樣防止App在後台運行,點擊應用桌面圖標重新啟動?

怎樣防止App在後台運行,點擊應用桌面圖標重新啟動?

編輯:關於Android編程

在項目中,遇到一個問題百思不得其解,那就是:我在app使用過程中,點擊了home鍵,然後去看看微信之類的其他應用,這個時候再點擊app桌面的圖標,這個時候app是重新啟動的,而不是從上次停止的界面開始的。

對於上面的情況,我覺得既然我的app已經在後台還運行著,為什麼就不能繼續重上一個界面繼續運行,非得從新運行呢。然後我就去查資料解決了這個問題。首先講講這個現象的本質。

原因:當點擊app桌面圖標時,app默認是任務你要新建一個應用,而不會去判斷你後台有沒有再運行的相同應用。

經過實踐我發現:當你點擊應用桌面圖標,應用會重新創建你的app的啟動頁,然而,你快速的點擊返回按鈕,你會發現你會回到上一次退出時的界面。經過查閱資料發現,系統會記錄你啟動acitivity的啟動順序的棧。並且把當前的啟動頁放到了最上方,如下圖所示:

注意:資料上面說以前啟動的activity都是不在了,只是系統記錄了他們啟動的順序,然而你按返回鍵,系統就會自動的重新創建新的activity,加入當app依次啟動了1到11的activity,然而,在11這個activity的時候,你點擊了home鍵、或點擊了其他軟件如微信qq等,這個時候你的app進入後台,1到11的這些activity其實被系統回收了,但是系統記錄了這個activity啟動順序的棧,然後當你回到這個應用時,實際上系統是重新創建了Activity11,然後點擊返回鍵,右重新創建了Activity10,就是這樣倒序 創建activity的原理。

\

然而,當你把App放入後台時,這個時候點擊了app桌面的啟動圖標,這個時候系統會默認你開啟一個新的應用,但是因為一個軟件只能在手機上面運行一個,所以,系統發現你之前的app還在後台,這個時候系統會把新創建的activity放到了之前activity棧的頂部,如上圖所示的Activity1

知道了原因之後,我們就好做處理了。

第一步:查看Activity1的啟動模式,如果Activity1的啟動模式為singleTask

 

android:launchMode="singleTask"

 

 

那麼必須把他刪除掉,或者改為“standard"。   第二步:在你的app的AndroidManifest.xml文件的application標簽下面設置
android:persistent="true"
持久化為 true;防止你的app掛後台被回收。   第三步:在activity1的onCreate方法中設置如下方法:
@Override  
protected void onCreate(Bundle savedInstanceState) {  
   super.onCreate(savedInstanceState);  
    if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {  
       
        finish();  
        return;  
    }  
    setContentView(R.layout.activity1_layout);
    // Regular activity creation code...  
}  
其實就是在setContentView()之前設置如下代碼:
 if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {
            finish();
            return;
        }
用於判斷這個Activity的啟動標志,看它所在的應用是不是從後台跑到前台的。如果是,則直接把它finish()掉,然後系統會去Activity啟動歷史棧查詢上一個activity,然後再新建它,所以還原到了我們按home鍵出去的那個界面。   好了,就這樣解決了App在後台運行,點擊應用圖標它會重新啟動的問題。希望對你有所幫助!

   
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved