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

bra*_*ey4 6 android task android-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-任务系列的意图,标志/

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

谢谢,Bradley4

dro*_*kar 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);
               }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

您还需要将这些添加到清单中:

<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.REORDER_TASKS" />
Run Code Online (Sandbox Code Playgroud)

  • API&gt; = 21中已弃用 (2认同)

dha*_*g23 0

您应该在调用 startActivity() 时使用FLAG_ACTIVITY_CLEAR_TOPFLAG_ACTIVITY_SINGLE_TOP 。