Android moveTaskToBack 还隐藏了启动调用 Application 的应用程序



我正在开发 2 个应用程序,它们将在单独的进程中运行,并且像客户端-服务器通过 Android 的MessengerIPC 介质进行通信一样。

应用程序A(服务器应用程序)建立了一个Bound Service,该可由客户端应用程序 B 在外部显式启动,以请求连接和执行某些操作。

应用程序 B 是客户端应用程序,它建立了自己的Bound Service- 显式启动并保持与应用程序 ABound Service的联系 - 该Application级别绑定并由不同的Activities交互,通过其Handler实例为后者提供反馈。

在某些情况下,App A 的Bound Service需要触发一系列专门编写脚本的Activity启动,以便在应用程序 B 的Bound Service轮询后为其服务器功能正常运行建立必要的要求。但是,一旦设置了它们,我需要将应用 B 带回前台,以便用户与之交互。

在该特定应用程序 A 的活动中,我onBackPressed()实现moveTaskToBack(true)以防止用户默认意外关闭应用程序,并打算简单地调用onBackPressed()以在以上述方式启动时显示应用程序 B 的任务。

但是,即使应用程序 B 已Activities运行,并且在应用程序 B 的Service调用应用程序 A 的Service时处于前台,这反过来又将应用程序 A 的Activities启动到前台,从应用程序 A 的Activity调用onBackPressed()会将用户直接发送回主屏幕,绕过应用程序 B。

如何简单地告诉应用 A 将自身发送到后台并显示应用 B,而不将应用 B 也发送到后台?为什么moveTaskToBack()把其他任务也移到后面?

因此,我还没有找到通知应用程序 A 将自身而不是启动它的任务(应用程序 B)发送到后台的确切方式,但我找到了一种方法来简单地告诉应用程序 A 将应用程序 B 发送到它前面,这对我有用。

通过跨越两个绑定服务的信使,我发送应用程序B的taskID,从其任何Activities获得的getTaskID(),方法是将其传递到捆绑包中,该捆绑包是我通过信使实例发送的消息msg.obj

然后,通过携带捆绑包通过应用程序 A 中启动后续活动的所有链接意图,我可以访问应用程序 A 中目标Activity中的taskID,并使用

ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
activityManager.moveTaskToFront(taskID, ActivityManager.MOVE_TASK_WITH_HOME);

改为将应用 B 发送到前台。当按下应用程序B的Activity时(onBackPressed()没有在那里被覆盖),我发现自己回到了应用程序A,这对于MOVE_TASK_WITH_HOME标志来说似乎很奇怪,但这对我来说并不麻烦。

但是,我仍然对原始问题的答案持开放态度,如果有的话,我会将其设置为正确答案。

相关内容

最新更新