我的问题:
如何在使用以下规则时在自己的Task中启动新Activity。
1)如果Activity已作为另一个Task的根存在(在同一个应用程序中),则将Task带到前台。我不希望创建另一个Activity实例。我只是希望它是作为前景的根的任务和要显示的任务的顶部活动。
注意:它一次只能作为一个任务的根,它只会作为任务的根目录而不存在。
2)如果Activity不存在,则在其自己的Task中创建此Activity。
为什么我要努力实现这一目标? 我在我的活动底部创建了四个底部,它们应该像标签一样。因此,如果我按下第二个“选项卡”,我希望显示与该选项卡关联的活动。但是如果它已经存在并且位于其自己的Task的底部,那么我希望该任务显示在当前位于Task顶部的任何Activity上。
到目前为止我尝试了什么? 我搜索了stackOverflow并找不到类似的问题。我看过http://developer.android.com/guide/topics/fundamentals/tasks-and-back-stack.html 和http://blog.akquinet.de/2010/04/15/android-activites-and-tasks-series-intent-flags/
我想我需要使用FLAG_ACTIVITY_NEW_TASK和/或亲和力,但不确定。请找一只手。
谢谢, Bradley4
答案 0 :(得分:18)
我能够为Android版本> = Honeycomb:
解决这个问题@TargetApi(11)
protected void moveToFront() {
if (Build.VERSION.SDK_INT >= 11) { // honeycomb
final ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
final List<RunningTaskInfo> recentTasks = activityManager.getRunningTasks(Integer.MAX_VALUE);
for (int i = 0; i < recentTasks.size(); i++)
{
Log.d("Executed app", "Application executed : "
+recentTasks.get(i).baseActivity.toShortString()
+ "\t\t ID: "+recentTasks.get(i).id+"");
// bring to front
if (recentTasks.get(i).baseActivity.toShortString().indexOf("yourproject") > -1) {
activityManager.moveTaskToFront(recentTasks.get(i).id, ActivityManager.MOVE_TASK_WITH_HOME);
}
}
}
}
您还需要将这些添加到您的清单中:
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.REORDER_TASKS" />
答案 1 :(得分:0)
您应该在调用startActivity()时使用FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_SINGLE_TOP。
答案 2 :(得分:0)
您可以在Activity
中设置launch mode
的{{1}}(android:launchMode),这样如果它正在运行,它就不会创建自己的新实例,但会当它不是时正常发射。然后,您可以使用Intent开始AndroidManifest
。
答案 3 :(得分:-1)