在不使用android的情况下在新任务中打开android活动:launchMode =" singleTask"

时间:2014-05-26 07:37:56

标签: android android-intent

我已经创建了一个主要活动的浏览器应用程序,它响应了以下意图:

 <intent-filter> 
       <data android:scheme="http"/>
       <data android:scheme="https"/>
       <category android:name="android.intent.category.DEFAULT"/>
       <category android:name="android.intent.category.BROWSABLE"/>
       <action android:name="android.intent.action.VIEW"/>
 </intent-filter>

如果我选择了我的应用程序,在其他任务(gmail,sms)上点击url,活动将在与调用任务相同的任务中打开。 当我选择不同的浏览器(Mozila firefox,chrome,dolphine)时,他们正在开设不同的任务。

查看其他浏览器清单,我看到没有人使用 android:launchMode =&#34; singleTask&#34;

我不想使用单一任务标记,因为它不是谷歌推荐的,也是我的其他问题。

我试图了解其他浏览器是如何做到这一点但却没有弄清楚。

任何想法?有没有其他方法可以在不使用singleTask标志的情况下在不同的任务中打开我的活动?

3 个答案:

答案 0 :(得分:2)

如果活动在单个任务中运行,您可以签入onCreate。如果不只是完成()它并使用FLAG_ACTIVITY_NEW_TASK再次创建

这可能对您有所帮助

   ActivityManager activityManager = (ActivityManager) ctx.getSystemService(Context.ACTIVITY_SERVICE);
    List<RunningTaskInfo> tasks = activityManager.getRunningTasks(Integer.MAX_VALUE);

    for (RunningTaskInfo task : tasks) {
        if (ctx.getPackageName().equalsIgnoreCase(task.baseActivity.getPackageName())) 
          // check if it's the only one activity or whatever                               
    }

答案 1 :(得分:2)

我在Android开发者site上找到了以下说明:

  

另一个例子,Android Browser应用程序声明了   Web浏览器活动应始终在其自己的任务中打开 - 通过指定   元素中的singleTask启动模式。这意味着   如果您的应用程序发出打开Android浏览器的意图,那么   活动未与您的应用程序放在同一任务中。代替,   要么为浏览器启动新任务,要么已经启动浏览器   有一个在后台运行的任务,该任务被提前   处理新意图。

正如您所看到的,android:launchMode=singleTask是您的正确选择。你已经提到你有这个属性的问题所以也许让我们专注于它们。

更新28.05.2014

Google关于singleTask launchMode的注释:

  

其他模式 - singleTask和singleInstance - 不合适   对于大多数应用程序,因为它们会产生一个交互模型   用户可能不熟悉,与大多数用户不同   其他应用程序。

来自Google的

singleTask和singleInstance用例:

  

专业发布(不推荐用于一般用途)

正如您所看到的,singleTask可能不建议用于一般用途,但您的情况并非一般,实际上它是singleTask完美匹配的情况之一。 换句话说,不禁止使用singleTask,只需要谨慎使用,以便为最终用户提供应用程序的常见体验。

我希望我现在为你说清楚。在您的情况下,您可以使用此启动模式。

答案 2 :(得分:1)

你正在努力弯曲规则&#34;一点点,如果你不使用android:launchMode="singleTask",你就不能清楚自己要避免的事情。

所以我建议研究:

  1. 创建Service并让Service听取意图过滤器。然后让Service打开您的Activity,并正确设置Activity的亲和力以匹配Service。这将允许您克服关联性未正确绑定Activity的问题。

  2. 让无声的Activity开始新Activity并退出。静默Activity将在新堆栈中启动(不是在单一任务模式下),并且在启动您实际需要的Activity时会自行关闭。