2

我有一个启动器应用程序,它有一个singleTask活动作为主要入口点。当用户导航到另一个活动或第 3 方应用程序然后点击主页按钮时,应该将此活动带到最前面。但是我的经验是,仅对于第一次按下主页按钮,会创建另一个实例(创建一个新任务,onCreate()被调用)。与此同时,旧任务仍然存在,包含此活动的原始实例,但无法导航回该任务/活动或将其带到前台。

在第一次按下主页按钮后,下一次按下主页按钮会将这个活动的第二个实例带到前台。不知道为什么不第一次onNewIntent()调用第一个实例的方法......所以这只发生一次,之后总是onNewIntent()调用第二个实例的方法。这意味着原始活动将无法访问..

我试图将任务带到前台,什么都没有发生......就像它从未存在过一样(但任务与活动一起存在,它在任何时候都不会被杀死)。我可以从代码中找到任务,也可以使用 shell 脚本。它包含原始活动

这发生在 Android TV (Os: Pie)上。知道这可能是什么原因吗?我真的不明白这是怎么发生的......顺便说一句,如果我将活动设置为singleInstance.

活动如下所示:

<activity
            android:name=".activities.MainActivity"
            android:excludeFromRecents="true"
            android:launchMode="singleTask"
            android:theme="@style/AppTheme">
            <intent-filter android:priority="2">
                <action android:name="android.intent.action.MAIN"/>

                <category android:name="android.intent.category.HOME"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="android.intent.category.LEANBACK_LAUNCHER"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.ALL_APPS"/>

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

我尝试交替使用上述属性(priority、excludeFromRecents、taskAffinity),也完全删除了它们,它们没有任何效果......

按下主页按钮会发送以下意图:

  • 行动:“android.intent.action.MAIN”
  • 类别:“android.intent.category.HOME”
  • 组件:上述活动

它还有一些附加功能,但我认为这无关紧要

4

2 回答 2

2

您正在经历这个令人讨厌的长期 Android 错误:

重新启动“主页”按钮上的活动,但......只是第一次

您在评论中说真实用户不会发生这种情况。这实际上不是真的。如果真正的用户会从 Play 商店安装您的应用程序,然后立即启动它(安装后单击“打开应用程序”按钮),那么问题将完全按照您的描述重现。

于 2020-04-18T11:16:16.073 回答
0

在过去的几个小时里,我一直在为完全相同的问题苦苦挣扎,并且我在 StackOverflow 上阅读了许多关于此主题/错误的类似问答。没有任何解决方案对我真正有效,直到出于好奇,我做了以下事情。

如果您正在构建一个启动器并在 MainActivity 中使用 onNewIntent() (尽管 OP 没有提到他正在使用这种方法),那么只需注释掉这一行:

super.onNewIntent(intent);

卸载您的应用程序并重新安装。

我不知道这是如何工作的,但是即使您取消注释同一行,它仍然以正确的方式运行,即:该应用程序实际上一直只有其主要活动的单个实例。我怎么知道的?我的 MainActivity 正在做一些数据库操作,之前我在我的 Logcat 中看到这些操作每次都进行了两次,但现在它们只进行了一次。

顺便说一句,我在 AndroidManifest.xml 中的 MainActivity 标记并没有什么特别之处:

    <activity
            android:name=".activities.MainActivity"
            android:exported="true"
            android:excludeFromRecents="true"
            android:launchMode="singleTask">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
            <category android:name="android.intent.category.HOME" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
于 2020-12-23T19:40:01.437 回答