2017-07-26 71 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 –

相关问题