应用程序重新启动播放商店打开点击
问题描述:
<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有我认为相同的问题。应用程序重新启动播放商店打开点击
答
我有同样的问题。将以下代码放入您的启动器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
你介意详细一点,为什么这个解决问题? – lelloman
谢谢你的回答,它解决了这个问题。有趣的是,很多应用程序都有这个特定的错误。 – user3278732
我最喜欢的Android bug :-(自始至今仍未修复,请参阅https://*.com/a/16447508/769265 –