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

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

<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,短信)的url点击,如果我select我的应用程序,活动打开在调用任务相同的任务。 当我select不同的浏览器(Mozilla的Firefox,铬,海豚),他们正在开放不同的任务。

看看其他浏览器清单,我看到没有人使用android:launchMode =“singleTask”

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

我试图了解其他浏览器如何做,但没有弄清楚。

有任何想法吗? 有没有其他的方式来打开我的活动在不同的任务,而不使用singleTask标志?

Solutions Collecting From Web of "在不使用android的情况下在新任务中打开android活动:launchMode =“singleTask”"

你试图“弯曲规则”一点,你不清楚你不想使用android:launchMode="singleTask"要避免的android:launchMode="singleTask"

所以我build议研究:

  1. 创build一个Service并让该Service监听意向filter。 然后让这个Service打开您的Activity ,并正确设置Activity的亲和力来匹配Service的。 这将允许您解决亲和力不正确地绑定Activity的问题。

  2. 有一个沉默的Activity开始一个新的Activity和退出。 静默Activity将在一个新的堆栈中启动(不是单重复模式),并在启动实际需要的Activity时自行closures。

如果活动在单个任务中运行,则可以检查onCreate。 如果不是完成()它并使用FLAG_ACTIVITY_NEW_TASK再次创build它

这可能会帮助你

  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 } 

我在Android开发人员网站上find以下说明:

又如,Android Browser应用程序声明Web浏览器活动应始终在其自己的任务中打开 – 通过在元素中指定singleTask启动模式。 这意味着如果您的应用程序意图打开Android浏览器,则其活动不会与您的应用程序处于同一个任务中。 相反,为浏览器启动一个新的任务,或者如果浏览器已经有一个任务在后台运行,那么这个任务被提出来处理新的意图。

正如你可以看到android:launchMode=singleTask在你的情况下是正确的select。 你已经提到你有这个属性的问题,所以也许让我们把重点放在他们。

更新28.05.2014

来自Google的关于singleTask launchMode的注意事项:

其他模式 – singleTask和singleInstance – 不适用于大多数应用程序,因为它们导致用户可能不熟悉的交互模型,并且与大多数其他应用程序非常不同。

来自Google的singleTask和singleInstance用例:

专门的发射(不build议一般使用)

正如你所看到的singleTask可能不被推荐用于一般用途,但你的情况不是一般的,实际上这是singleTask完全适合的情况之一。 换句话说,singleTask不是被禁止的,只是需要谨慎使用,以便为最终用户提供与您的应用程序共同的体验。

我希望我现在已经清楚地告诉你了。 在你的情况下,感受这种启动模式。