根据Android Lollipop的变化,参考:
stackoverflow问题
奶酪工厂博客
我希望,当我从应用程序中启动其他应用程序的活动时,即使行为默认为默认,它也应该在新任务中打开(启动模式是标准)。因此,我制作了2个测试应用程序以验证相同的行为。但是,如果没有指定的启动模式,则坦率的是,另一个应用程序总是在我的应用程序的任务中打开。我已经在小米redmi注释3(5.1.1),棉花糖仿真器(x86)上测试了这一点,两者的行为相同。我感谢您对此的帮助,也是Android开发人员网站的参考链接。
一些代码:
Launching app :
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
startActivity(intent);
break;
App to be launched :
<activity android:name="com.android.sample.launchdemo.ActivityB">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
在启动应用程序中单击的按钮上,启动了意图并成功打开活动,但在相同的任务中。预先感谢您的任何帮助/建议。
浏览文档后,我的感觉是标准模式的工作方式与Android 5.0之前(Lollipop)之前相同。奶酪工厂博客文章是唯一一篇指定该动作的文章,即使在我自己的经验中,标准发布模式也在其发送的同一任务中打开了一项活动(除非通过了意图旗帜)。如果我错了,请纠正我,但没有在Android文档中指定标准模式将打开新任务。来自Android文档:
" standard"(默认模式):系统在启动的任务中创建活动的新实例,并将其路由到它。该活动可以多次实例化,每个实例都可以属于不同的任务,并且一个任务可以具有多个实例。请参阅完整文档
对于您要寻找的内容,启动Intent
时,保证新任务的唯一方法是使用标志FLAG_ACTIVITY_NEW_TASK
。您可以通过调用intent.setFlag(Intent.FLAG_ACTIVITY_NEW_TASK)
或intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
来设置此设置(后者用于将标志一起链接在一起,因为该方法将返回意图)。
进行了更多的研究之后,似乎在Android 5.0 Lollipop中进行的唯一更改(与此相关)是,最近的应用程序屏幕可以显示活动的多个活动。
在先前的版本中,Recents屏幕只能显示一个用户最近与用户进行交互的一个任务。现在,您的应用程序可以根据需要打开更多的任务,以进行文档的其他并发活动。此功能通过让用户快速在Recents屏幕上的单个活动和文档之间切换来有助于多任务处理,并且在所有应用程序中都具有一致的切换体验。此类任务的示例可能包括Web浏览器应用程序中的打开选项卡,生产力应用中的文档,游戏中的并发匹配或在消息传递应用中聊天。
对我来说,这似乎是唯一有关的变化,并且帖子(CheeseFactory等)设置了documentLaunchMode
来为每项活动创建新任务(考虑到CheeseFactory具有" Gallery"应用程序,很可能是这种情况)。关于并发文档和DocumentLaunchMode的文档。documentLaunchMode
和标志FLAG_ACTIVITY_NEW_TASK
可以配置为执行类似的事情documentLaunchMode
是首选。
我已经找到了下面的文档。
https://developer.android.com/guide/components/activities/recents.html
=>当用户使用浏览器时,他们点击共享> gmail。出现Gmail应用程序的组合屏幕。当时敲击"回收"按钮可显示Chrome和Gmail作为单独任务运行。在较低版本的Android中,所有活动都作为一个任务出现,使后按钮成为导航的唯一手段。图2显示了RECENTS屏幕在Android 5.0及更高版本中的外观,而平台的较低版本。Android 5.0及更高版本的左屏幕上的图像,右侧的图像显示了其在Android较低版本中的显示方式。
并参考以下链接。Lollipop:让我的活动留在启动股份意图的任务中
=>默认情况下,myfirstapp.mainactivity的启动模式为"标准",并且任何意图标志均未设置。 但是在myfirstapp.mainactivity通过相册的共享动作开始之后,Intent Flag包含flag_activity_multiple_task,flag_activity_new_document。
当通过共享开始活动时,一项在其工具栏中包含共享的活动只是将其分享意图设置为其shareainction -provider,然后ShareAction -provider以这种意图开始了一项活动 - 在这种情况下,myfirstapp.mainactivity。
。因此,我认为从Lollipop开始,系统从一个不同的应用程序开始了该活动的新任务,该应用程序仅在通过共享操作开始活动时,其启动模式为"标准"。