使用服务时从最近的任务中删除应用时不会终止



首先,这个问题是关于如何防止应用程序被杀死的NOT。事实上,我希望它被杀死。

现在问题来了。我的应用程序连接到BLE设备,我希望在应用程序处于后台时保持连接,但我不希望在用户从最近的应用程序中删除应用程序时保持连接。

我实现了一个在连接启动时运行的服务,当应用程序进入后台时,我会将其发送到前台。我只尝试了bound service(当活动被破坏时会被破坏(,也尝试了在onTaskRemoved中停止的started service。这两起案件都有相同的问题。

问题是,当我没有使用该服务并从最近的应用程序中删除该应用程序时,它被正确地终止了,BLE连接也被终止了,但当我开始使用该服务时,应用程序进程似乎仍然处于活动状态,并且BLE连接被保持。

我使用Android Studio探查器进行了一些调查,我可以看到,在我从最近的应用程序中删除该应用程序后,我的应用程序没有活动,也没有服务运行,但应用程序对象仍然存在。

Leakanary也没有报告任何内存泄漏。

这似乎与这个问题相似,但没有答案。这也有点类似于这个问题,但我使用的是干净的Android,而不是cordova。

我调查了Logcat,在没有服务的情况下,我得到了:

HwRecentsTaskUtils: remove task send broadcast packageName={my_package_name}, userId=0,taskId=16893
ActivityManager: Killing 30468:{my_package_name}/u0a918 (adj 900): remove task
…
WindowManager: WIN DEATH: Window{bcb8d8c u0 {my_package_name}/{my_package_name}.MainActivity}

在我得到服务的情况下:

HwRecentsTaskUtils: remove task send broadcast packageName={my_package_name}, userId=0,taskId=16894
…
ActivityThread: Remove activity client record, r= ActivityRecord{787d7fd token=android.os.BinderProxy@216a996 {{my_package_name}/{my_package_name}.MainActivity}} token= android.os.BinderProxy@216a996
MyService: service onTaskRemoved
MyService: service onDestroy

在第二种情况下,应用程序任务似乎没有被删除,我不知道为什么。当活动和服务都不活动时,是什么可以防止我的应用程序被杀死?

您谈论的是托管应用程序的操作系统进程,而不是"任务";(这是一个Android结构(。安卓负责杀死操作系统进程并回收它们。它想在什么时候做,如果它想的话,而你无法控制这一点。您不能假设您的操作系统进程在任何特定情况下都会被终止。

您需要以这样一种方式编写代码,以便能够处理发生的任何事情。

您可以尝试这样做,在AndroidManifest.xml中,将android:stopWithTask="true"添加到您的服务定义中

相关内容

  • 没有找到相关文章

最新更新