【问题标题】:App restarting on play store open click应用程序在 Play 商店打开点击重新启动
【发布时间】:2017-07-26 10:28:08
【问题描述】:
 <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>

所以很简单。当我从启动器图标打开我的应用程序时,它会打开。我再次点击启动器我的应用程序图标,它会再次将我的应用程序带到前面,因为它打开了。但是,如果我去 Play 商店并从那里单击打开我的应用程序打开了两个实例。 如果你想要一个如何工作的例子,facebook 也有同样的问题。我认为另一个应用程序 fotmob 也有同样的问题。

【问题讨论】:

    标签: android launchmode


    【解决方案1】:

    我有同样的问题。将以下代码放入您的启动器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 -> B -> C] 并且 A 是根 Activity, 当您从 Play Store 启动应用程序时,任务堆栈将变为(系统清除根的顶部)[A] 但是如果您完成了根 Activity 堆栈将看起来像(系统将创建根 Activity 的新实例并将现有任务的顶部放置) [B -> C -> A]。

    为什么?

    因为 Play 商店会启动 category=LAUNCHER、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 上测试

    【讨论】:

    • 您能详细说明一下为什么这能解决问题吗?
    • 感谢您的回答,它解决了手头的问题。有趣的是,很多应用程序都有这个特殊的错误。他们可以使用这里的解决方案。
    • 我一直以来最喜欢的 Android 错误 :-( 至今仍未修复。见 stackoverflow.com/a/16447508/769265
    • 你答案中的解决方案是正确的,会解决问题的。然而,你的解释是错误的。当您从安装程序启动应用程序(第一次)或从 IntelliJ IDEA 或 Android Studio 或 Eclipse 等 IDE 启动应用程序(有时,取决于它是如何完成的)时,就会存在该错误。以这种方式启动应用程序后,如果按 HOME 并通过单击应用程序图标启动应用程序,Android 会感到困惑并且无法识别启动 Intent 应该只是将任务带到前台,因此它创建一个不应该启动的新实例Activity
    • 另见issuetracker.google.com/issues/36941942issuetracker.google.com/issues/36907463(请给他们加注星标,因为这有助于提高认识)
    猜你喜欢
    • 1970-01-01
    • 2019-11-17
    • 2020-02-04
    • 1970-01-01
    • 2016-07-12
    • 1970-01-01
    • 1970-01-01
    • 2012-12-13
    • 1970-01-01
    相关资源
    最近更新 更多