簡體   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