【发布时间】:2020-02-12 04:54:03
【问题描述】:
我有一个 启动器应用,它有一个 singleTask 活动作为主要入口点。当用户导航到另一个 Activity 或第 3 方应用程序然后点击 主页按钮 时,应该将此 Activity 置于最前面。但是我的经验是仅对于第一次按下主页按钮,会创建另一个实例(创建一个新任务,调用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”
- 组件:上述活动
它还有一些额外的东西,但我认为它不相关
【问题讨论】:
-
你在用
taskAffinity吗? -
有没有试过都没有效果
-
你为什么要加
android:excludeFromRecents="true"呢?这将阻止活动显示在任务切换器中,因此如果它不可见,您将无法有效地返回任务。 (我知道你提到过它们,但仍然看起来很奇怪)。 -
安装后第一次如何启动应用程序?您可能会看到这个讨厌的 Android 错误:stackoverflow.com/questions/16283079/…
-
顺便说一句,我想就这个特定问题与你联系,因为我看到你在这个话题上(也)相当不错,但你还是找到了这个问题,所以谢谢!
标签: android android-activity android-tv launchmode android-activitymanager