繁体   English   中英

使用服务时从最近的任务中删除应用程序不会被杀死

[英]App isn't killed when removed from recent tasks when using service

首先,这个问题不是关于如何防止应用程序被杀死。 其实我想杀了它。

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

我实现了一个在连接启动时运行的服务,当应用程序进入后台时我将其发送到前台。 我尝试了仅在活动被破坏时销毁的bound service ,以及我在onTaskRemoved中停止的已started service 两种情况都有相同的问题。

问题是当我不使用该服务并从最近删除该应用程序时,它被正确杀死并且BLE连接被终止,但是当我开始使用服务时,应用程序进程似乎仍然处于活动状态并且BLE连接持续存在。

我使用 Android Studio 分析器进行了一些调查,我可以看到在我从最近删除应用程序后,我的应用程序中没有 Activity 并且没有运行服务,但应用程序 object 仍然存在。

Leakanary 也没有报告任何 memory 泄漏。

似乎它可能与此问题相似,但没有答案。 它也有点类似于这个问题,但我使用干净的 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 构造)。 Android 负责杀死操作系统进程并回收它们。 如果它愿意,它会在它想要的时候执行它,而你无法控制它。 您不能假设您的操作系统进程在任何特定情况下都会被杀死。

您需要以可以处理发生的任何事情的方式编写代码。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM