[英]open android activity in new task without using android:launchMode=“singleTask”
我创建了一个浏览器应用程序,该应用程序具有主要活动,可以响应以下意图:
<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>
在url上,如果我选择我的应用程序,则从其他任务(gmail,sms)单击,该活动在与调用任务相同的任务中打开。 当我选择其他浏览器(Mozila firefox,chrome,dolphine)时,它们将打开不同的任务。
查看其他浏览器清单,发现没有人使用android:launchMode =“ singleTask” 。
我不想使用单个任务标志,因为Google不推荐使用它,这也给我带来了其他问题。
我试图了解其他浏览器是如何做到的,但没有弄清楚。
有任何想法吗? 还有其他方法可以在不使用singleTask标志的情况下在其他任务中打开我的活动吗?
如果活动在单个任务中运行,则可以签入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
}
我在Android Developers 网站上找到了以下说明:
作为另一个示例,Android浏览器应用程序通过在元素中指定singleTask启动模式来声明Web浏览器活动应始终在其自己的任务中打开。 这意味着,如果您的应用程序发出打开Android浏览器的意图,则其活动不会与您的应用程序放在同一任务中。 取而代之的是,要么为浏览器启动一个新任务,要么,如果浏览器已经在后台运行了一个任务,则将该任务带到新的位置以处理新的意图。
如您所见, android:launchMode=singleTask
是您情况下的正确选择。 您已经提到过此属性存在问题,所以也许让我们关注它们。
更新28.05.2014
Google关于singleTask launchMode的说明:
其他模式(singleTask和singleInstance)不适用于大多数应用程序,因为它们导致的交互模型可能对用户来说是陌生的,并且与大多数其他应用程序有很大不同。
Google的singleTask和singleInstance用例:
专门发射(不建议一般使用)
如您所见,可能不建议将singleTask用于一般用途,但您的情况不是一般情况,实际上,这是singleTask非常适合的情况之一。 换句话说,singleTask是不被禁止的,只需要谨慎使用它,以便为最终用户提供有关您的应用程序的常见体验。
希望我现在为您澄清。 在您的情况下,对这种启动模式感到满意。
您正在尝试“弯曲规则”,并且对于不尝试通过避免使用android:launchMode="singleTask"
避免的事情还不够清楚。
因此,我建议研究以下任一方面:
创建一个Service
并使该Service
侦听意图过滤器。 然后让此Service
打开您的Activity
,并正确设置Activity
的相似性以匹配Service
的亲和力。 这将使您克服亲和力未正确绑定Activity
的问题。
让静默Activity
开始一个新的Activity
并退出。 静默Activity
将在新堆栈中启动(而不是在单任务模式下),并且在启动您实际需要的Activity
时会自行关闭。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.