【发布时间】:2016-08-05 19:22:25
【问题描述】:
我想始终启动一个特定的活动,而不是在关闭应用程序期间处于活动状态的这个。我不可能在关闭之前切换到想要的活动,因为它可能已经死了。
我宁愿从最近的应用程序中删除整个程序的快捷方式,也不愿让用户被启动积分而不是启动启动画面弄糊涂。然而,这只是解决方法(但以防万一,我该怎么做?)
【问题讨论】:
我想始终启动一个特定的活动,而不是在关闭应用程序期间处于活动状态的这个。我不可能在关闭之前切换到想要的活动,因为它可能已经死了。
我宁愿从最近的应用程序中删除整个程序的快捷方式,也不愿让用户被启动积分而不是启动启动画面弄糊涂。然而,这只是解决方法(但以防万一,我该怎么做?)
【问题讨论】:
我反编译了一些应用程序并找到了他们的解决方案:
<android:name="..."
android:taskAffinity=":shortcut"
android:excludeFromRecents="true"
android:clearTaskOnLaunch="true"
...
适用于应用程序中所有活动的亲和性名称,但那些使用自己的 taskAffinity 属性设置不同亲和性的活动除外。有关详细信息,请参阅该属性。
默认情况下,应用程序中的所有活动共享相同的亲和性。该关联的名称与
<manifest>元素设置的包名称相同。
【讨论】:
如果你的意思是你想每次都通过相同的活动来启动你的应用程序,添加
android:launchMode="singleTask"
到清单文件中的主要活动。这将强制您的应用程序将此活动放在活动堆栈的底部,以清除所有其他可能正在运行的活动。
【讨论】:
Activity 将无法实现 OP 的目标。它不会从堆栈中清除其他活动。我不知道这是如何被接受为正确答案的。
实现此目的的一种方法是使用android:excludeFromRecents="true" 属性标记所有活动。这将确保您的任何活动都不会显示在“最近的应用程序”列表中。
您还应该查看android:finishOnTaskLaunch 和android:stateNotNeeded 属性。
【讨论】:
Activity 标记为excludeFromRecents="true",那么用户将不会在最近任务列表中找到该任务,并且如果他离开该任务将无法返回该任务(通过按 HOME 按钮或接听来电等)。不需要用这个属性标记所有活动,只需要主(根)Activity就够了。
Activity,这也不是 OP 想要的。
解决这个问题的正确方法是添加
android:noHistory="true"
到所有活动的清单条目除了主(根)Activity。
当用户从最近的任务列表或通过按主页页面上的应用程序图标返回您的应用程序时,所有活动(除了主(根)Activity)将从任务中删除(实际上,当用户通过按 HOME 按钮、接听来电、从通知栏中选择另一个应用程序等方式离开应用程序时,它们会立即被删除。
【讨论】: