0

我有两个 android 应用程序,我们称它们为应用程序 A 和应用程序 B。
在应用程序 AI 内部创建一个共享意图,如下所示:
shareIntent=Intent.createChooser(sendIntent, null); // sendIntent contains data to share.
这将用于将数据传递给应用程序 B。
应用程序 B 的 MainActivity(它唯一的 Activity)配置为具有launchMode="singleTask".

行为 1
如果从应用程序 AI 使用startActivity(shareIntent)并且应用程序 B 在后台,它会进入前台并使用 onNewIntent 方法处理意图。如果应用 B 不在后台,它会为应用 B 启动一个新任务,其初始意图设置为从应用 A 传递的 sendIntent。

行为2
如果从app AI使用startActivityForResult(shareIntent, SUCCESS_CODE),app B是否在后台无关紧要,它会重新启动,而且MainActivityapp B的启动并推送到app A的backStack,它不会在a中启动单独的任务,在此之后我有 2 个应用程序 B 的 MainActivity,一个我保留在后台,一个在应用程序 A 内启动。

为什么会startActivityForResult导致行为 2?
作为无法控制应用 A 如何启动它以始终显示行为 1 的应用 B 的开发人员,可以做些什么?

4

1 回答 1

0

如果启动模式为或,则无法开始Activity使用。原因是要求目标(i:正在启动的目标)在与预期结果相同的任务中运行。startActivityForResult()ActivitysingleTasksingleInstancestartActivityForResult()ActivityActivity

通常,如果您尝试启动使用or启动模式声明的Activityand ,Android 会自动添加到and 以确保目标在单独的任务中启动。ActivitysingleTasksingleInstanceIntent.FLAG_ACTIVITY_NEW_TASKIntentActivity

如果开发人员希望他的Activity启动方式是使用startActivityForResult()并且他编写代码来实际返回一个结果,那么使用启动模式orActivity来声明它是绝对没有意义的。ActivitysingleTasksingleInstance

这种行为不是你说的你看到的,但是很startActivityForResult()明显singleTask.

于 2021-03-13T21:53:56.113 回答