use*_*732 2 android launchmode
<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>
Run Code Online (Sandbox Code Playgroud)
所以很简单.当我从启动器图标打开我的应用程序,它opens.I去点击启动我的应用程序图标再次再次带来了我的申请前自open.However,如果我去Play商店,点击打开从那里我的应用程序有两个实例打开.如果你想要一个如何工作的例子,facebook也有同样的问题.另外一个app 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
}
Run Code Online (Sandbox Code Playgroud)
问题:
假设你有任务堆栈[A - >乙 - > C],A是根系活力,当您启动从Play商店任务堆栈的应用程序将成为(系统清除根顶部)[A],但如果你已经完成了你的根活动堆栈看起来像(系统将创建root Activity的新实例并放置现有任务的顶部)[B - > C - > A].
为什么?
因为Play商店将使用category = LAUNCHER启动app,action = MAIN,flag = ACTIVITY_NEW_TASK,flag = ACTIVITY_BROUGHT_TO_FRONT
解
假设您已删除了根活动,现在您的堆栈是[B - > C],当您尝试从Play商店打开应用程序时,您的堆栈变为[B - > C - > A]
现在,A不在堆栈的根目录中并且具有category = LAUNCHER和action = MAIN所以,我们可以使用finish()删除A并且堆栈将保持相同[B - > C]
*注意:在Android 7.0上测试过
| 归档时间: |
|
| 查看次数: |
746 次 |
| 最近记录: |