Android,如何将任务带到前台?

时间:2011-08-02 22:45:02

标签: android android-activity task

我的问题:

如何在使用以下规则时在自己的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.htmlhttp://blog.akquinet.de/2010/04/15/android-activites-and-tasks-series-intent-flags/

我想我需要使用FLAG_ACTIVITY_NEW_TASK和/或亲和力,但不确定。请找一只手。

谢谢, Bradley4

4 个答案:

答案 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_TOPFLAG_ACTIVITY_SINGLE_TOP

答案 2 :(得分:0)

您可以在Activity中设置launch mode的{​​{1}}(android:launchMode),这样如果它正在运行,它就不会创建自己的新实例,但会当它不是时正常发射。然后,您可以使用Intent开始AndroidManifest

答案 3 :(得分:-1)