1

我在清单 App1 和 App2 中有 2 个具有相同 SharedUserId 值的应用程序。App1 有一个服务组件,它被指定在一个单独的进程中运行(在清单 android:process=":remote" 中)。该服务的主要目的是检查 App2。我希望该服务在 App2 关闭时进行一些清理。

当我强制关闭 App2 时,App1 的服务被杀死,并且它的 onDestroy() 方法没有被调用。当我强制停止 App2 时,如何确保 App1 的服务不会被终止(或至少在调用 onDestroy 时完成)?

编辑:Galaxy Nexus 上的 Android 4.0.1 如果有影响的话

4

1 回答 1

0

是的,这是可能的。如果您使用 sharedUserId 想象这两个应用程序在同一个线程中运行,这意味着它们具有相同的应用程序生命周期,这基本上意味着在这些应用程序中的任何一个上“强制关闭”您都会终止它们的线程。

这意味着该线程上的所有内容都被杀死。在应用程序之间使用 sharedUserID 和 sharedProcess 而不是使用内容提供者的负面影响之一。

当您强制关闭应用程序时,我认为没有解决方法。也许你应该以“正常”的方式完成它并让操作系统杀死它。

更新您的评论:

一般来说,我不倾向于干预这些事情。用户可能想要手动关闭应用程序,就像我习惯做的那样,如果您有服务或应用程序一次又一次地运行,那会很烦人。

这就是我的观点。尽管我相信,当触发未处理的异常时,有一个技巧可以在强制关闭后手动重新启动您的应用程序,我猜用户强制关闭的反应是相同的。我猜您可以在服务中添加待处理的意图:Android:如何在“强制关闭”后自动重启应用程序?

于 2012-07-04T19:26:21.570 回答