2017-07-26 125 views
0
<activity 
      android:name=".activity.landingpage.LandingPageActivity" 
      android:label="@string/app_name" 
      android:launchMode="singleTop" 
      android:screenOrientation="portrait" 
      android:theme="@style/AppTheme.NoActionBar"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

所以它很簡單。當我從啓動器圖標打開我的應用程序時,它會打開。我再次點擊啓動器我的應用程序圖標,它將我的應用程序從打開後再次帶到前端。但是,如果我去玩商店並單擊從那裏打開應用程序有兩個實例打開。 如果你想要一個例子如何工作,Facebook有同樣的問題。另一個應用程序fotmob有我認爲相同的問題。應用程序重新啓動播放商店打開點擊

回答

2

我有同樣的問題。將以下代碼放入您的啓動器Activity

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    if (!isTaskRoot() 
       && getIntent().hasCategory(Intent.CATEGORY_LAUNCHER) 
       && Intent.ACTION_MAIN.equals(getIntent().getAction())) { 
      finish(); 
      return; 
     } 
    //other code 
} 

問題:

假設有任務堆棧[A - >乙 - > C]和A是根活動, 當啓動從播放存儲任務堆棧應用將成爲(系統清除根節點的頂部)[A]但是如果你已經完成了你的根節點,活動堆棧看起來像(系統將創建根Activity的新實例並放置現有任務的頂部)[B - > C - > A]。

爲什麼?

因爲Play商店將推出與類別=發射器,行動= MAIN,標誌應用= ACTIVITY_NEW_TASK,標誌= ACTIVITY_BROUGHT_TO_FRONT

解決方案

取的情況下,你已經刪除了你的根系活力,現在您的堆棧是[B - > C],當您嘗試從Play商店打開應用程序時,堆棧變爲[B - > C - > A]

現在,A不在堆棧的根目錄中, =發射器和行動=主的話,我們可以刪除使用完成A()和堆棧將保持相同的[B - > C]

*注:測試在Android 7.0

+0

你介意詳細一點,爲什麼這個解決問題? – lelloman

+0

謝謝你的回答,它解決了這個問題。有趣的是,很多應用程序都有這個特定的錯誤。 – user3278732

+0

我最喜歡的Android bug :-(自始至今仍未修復,請參閱https://stackoverflow.com/a/16447508/769265 –

相關問題