Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> Android實現不重復啟動APP的方法,androidapp

Android實現不重復啟動APP的方法,androidapp

編輯:關於android開發

Android實現不重復啟動APP的方法,androidapp


轉載博客:http://blog.sina.cn/dpool/blog/s/blog_5de73d0b0102vpai.html?utm_source=bshare&utm_campaign=bshare&utm_medium=weixin&bsh_bid=883565991

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

  

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

  

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

最近發現了一個方法,
  它就是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);
}

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

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

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

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