Android實現不重複啓動APP的方法

相似QQ、微信這樣的APP,通常都不會打開兩個實例。
  好比:打開QQ客戶端,進入到好友聊天界面,而後按HOME返回桌面
這時候有兩種狀況:
  一、若是你在最近任務中切換會QQ客戶端,那麼仍是顯示好友聊天界面
  二、若是點擊QQ客戶端圖標打開,依然顯示好友聊天界面
默認狀況下是不可能實現上面的功能的。
可是,使用android:alwaysRetainTaskState='true',能夠實現咱們的需求。
咱們要作的是:
  在Androidmanifest.xml文件中,給根Activity加上android:alwaysRetainTaskState='true',就能夠了。
  根Activity就是應用默認啓動的Activity,通常是歡迎頁面SplashActivity或主頁面MainActivity。
以下圖所示:

 

 

簡單解釋一下:
  android:alwaysRetainTaskState顧名思義就是【老是保留任務棧狀態】
  Task指的是任務棧,是用於記錄Activity打開順序、保存狀態等。
  如上圖,打開客戶端的順序是 SplashActivity --> GuideActivity --> MainActivity
  (歡迎頁面 --> 功能引導頁面 --> 主頁面)
  那麼,它在任務棧中就是, java

 

  因爲咱們在Androidmanifest.xml文件中,給SplashActivity設置android:alwaysRetainTaskState='true',當咱們按HOME鍵返回桌面,任務棧的狀態被保留着,當咱們點擊應用圖標打開再次應用時,系統會判斷是否已經存在以SplashActivity爲根Activity的棧,若是有,那麼就直接使用該棧,並顯示棧頂的Activity。注意,只須要設置根Activity就能夠了。 android

最近發現了一個方法,
  它就是Activity.moveTaskToBack(boolean),這個方法能夠把整個任務棧放到後臺運行,至關於PC窗口的最小化同樣!十分強大!通常來講,爲了保證應用在後臺運行,提升再次打開的速度,通常都不會直接finish(),(能夠參考一下QQ、微信、微博這些長駐留應用)爲了實現這個功能,比較通用的作法是在用戶按下返回鍵的時候,調用以下代碼實現: 微信

@Override
public void onBackPressed()
{
//按返回鍵返回桌面
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addCategory(Intent.CATEGORY_HOME);
startActivity(intent);
}

  這個方法雖然能夠實現咱們所需功能,可是,若是有用戶安裝了多個桌面應用的時候,可能會提出對話框,要求用戶選擇一個桌面運行。可是,若是把代碼改爲這樣: ide

@Override
public void onBackPressed()
{
//按返回鍵返回桌面
moveTaskToBack(true);
}

  就不會出現上述問題了!!其它,QQ也是用這種方式實現的。有一點細微的差異。前者會返回桌面的默認頁面,後者返回桌面上次停留的頁面。 ui

相關文章
相關標籤/搜索