如何解决使用服务时从最近的任务中删除应用程序不会被杀死
首先,这个问题不是关于如何防止应用被杀死。其实我想把它杀掉。
问题来了。我的应用程序连接到 BLE 设备,我希望在应用程序在后台时保持连接,但我不希望在用户从最近的应用程序中删除应用程序时保持连接。
我实现了一个在连接开始时运行的服务,当应用程序进入后台时我将它发送到前台。我只尝试了 bound service
,它在 Activity 被销毁时被销毁,还尝试了 started service
,我在 onTaskRemoved
停止。两种情况都有相同的问题。
问题是当我不使用该服务并从最近的应用程序中删除该应用程序时,它被正确杀死并且BLE连接正在结束,但是当我开始使用该服务时,应用程序进程似乎仍然处于活动状态并且BLE 连接保持不变。
我使用 Android Studio Profiler 进行了一些调查,我可以看到,从最近的应用中删除应用后,我的应用中没有 Activity 和 Service 正在运行,但 Application 对象仍然存在。
Leakanary 也不会报告任何内存泄漏。
好像可能和this issue类似,但是没有答案。它也有点类似于 this issue,但我使用的是干净的 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},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"
添加到您的服务定义
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。