2011-03-07 57 views
0

我想始终启动一项特定的活动,而不是在关闭应用程序时激活的活动。我没有可能在关闭前切换到理想的活动,因为它可能已经死了。最近应用程序的快捷方式始终启动应用程序的最新活动。如何改变?

我宁愿甚至从最近的应用程序中删除整个程序的快捷方式,而不是让用户因启动信用而不是启动闪屏而感到困惑。然而,这只是解决方法(但以防万一,如何才能做到这一点?)

回答

1

如果你的意思是你想通过相同的活动,每次来启动应用程序,添加

android:launchMode="singleTask" 

到您的主要活动清单文件。这将迫使你的应用程序把这个活动放在活动堆栈的底部,清除可能已经运行的所有其他活动。

+0

这是错误的。将这种特殊的启动模式添加到主“活动”中并不会达到OP的目标。它不会清除堆栈中的其他活动。我不知道这是如何被接受为正确的答案。 – 2016-08-05 11:05:30

1

你可以做到这一点的一种方法是标记所有活动与android:excludeFromRecents="true"属性。这可确保您的任何活动都不会显示在“最近的应用程序”列表中。

您还应该查看android:finishOnTaskLaunchandroid:stateNotNeeded属性。

+0

如果您用'excludeFromRecents ='标记您的主'Activity' “true”,那么用户不会在最近的任务列表中找到任务,并且如果他离开(通过按HOME键或接听来电等),将无法返回任务。不需要用这个属性标记所有**活动,只需要主(根)活动 足够。 – 2016-08-05 11:08:34

+0

此答案将阻止应用程序在最近的任务列表中显示出来。这可能不是OP想要的。不仅如此,如果应用程序有2个活动打开并且用户按下HOME按钮,然后返回到应用程序(不是通过从最近的任务列表中选择它,而是通过再次按下HOME画面上的应用程序图标),然后它会返回到应用程序的第二个“活动”在顶部,这也不是OP想要的。 – 2016-08-05 11:27:21

2

我反编译的一些应用程序,并找到了自己的解决方案:

<android:name="..." 
     android:taskAffinity=":shortcut" 
     android:excludeFromRecents="true" 
     android:clearTaskOnLaunch="true" 
     ... 

关于android:taskAffinity

适用于所有活动的应用程序中,除了那些设置了不同的亲和力与亲和的名字他们自己的任务亲和力属性。查看该属性以获取更多信息。

默认情况下,应用程序内的所有活动共享相同的关联。该关联的名称与<manifest>元素设置的包名称相同。

0

解决这个正确的方法是

android:noHistory="true" 

添加到清单项中的所有活动除主(根)Activity

当用户从最近的任务列表中返回到您的应用程序,或者通过按下HOME页面上的应用程序图标,所有活动(除主(根)Activity)将从任务中删除,当用户通过按HOME键离开应用程序,接听来电,从通知栏中选择另一个应用程序等时,它们会立即被移除。

相关问题