簡體   English   中英

強制停止后,服務仍然有效

[英]Service still alive after force stop

我想知道在用戶強行關閉應用后,服務保持正常運行是否正常。

我的應用程序使用綁定服務在后台處理藍牙通信,效果很好。 在服務的onCreate方法中,我檢查了Sqlite數據庫中的一些內容,但是如果強制關閉應用程序,則該數據庫顯然無法訪問。

因此,當我強制停止應用程序時,幾秒鍾后,該服務在嘗試從數據庫讀取時崩潰。 現在,我可以編寫try / catch來檢查我的SQLiteOpenHelper是否為null,但我希望我的服務停止“強制關閉”操作,並避免觸發onCreate方法。

否則,該應用程序和服務都可以很好地工作,但是該UI錯誤消息使我感到困惑。

工藝:(包裝),PID:24030

java.lang.RuntimeException:無法創建服務(Package).TraitementsAsync.ServiceComm:android.app.ActivityThread.handleCreateService(ActivityThread.java:2746)處的java.lang.NullPointerException android.app.ActivityThread.access $ 1900(ActivityThread。的android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1359)的android.os.Handler.dispatchMessage(Handler.java:102)的android.os.Looper.loop(Looper.java:136)的java:169) )的android.app.ActivityThread.main(ActivityThread.java:5476)處的com.java.lang.reflect.Method.invokeNative(本機方法)處的com。導致dalvik.system.NativeStart.main的android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1268)在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)創建者:(Package).service.ServiceBdd.getParametre(ServiceBdd.java:414)處(Package).service.ServiceTipe.getParametre(ServiceTipe.java:699)處的java.lang.NullPointerException。 在android.app.ActivityThread.handleCreateService(ActivityThread.java:2736)上的mentsAsync.ServiceComm.onCreate(ServiceComm.java:83)在android.app.ActivityThread $上的android.app.ActivityThread.access $ 1900(ActivityThread.java:169) H.handleMessage(ActivityThread.java:1359)在android.os.Handler.dispatchMessage(Handler.java:102)在android.os.Looper.loop(Looper.java:136)在android.app.ActivityThread.main(ActivityThread .java:5476),位於java.lang.reflect.Method.invokeNative(本地方法),位於com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run.java.lang.reflect.Method.invoke(Method.java:515) (ZygoteInit.java:1268)在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)在dalvik.system.NativeStart.main(本機方法)

根據該問題,這絕對是不正常的行為,特別是因為該服務正在NullPointerException (NPE)。 Android服務用於計算一組可能是同步的或非同步的(異步)任務。 另外,在兩種情況下,實施非阻塞和線程安全機制都是開發人員的責任。

正如我們在Android頁面上看到的那樣,

(...)啟動服務,即使用戶切換到另一個應用程序,該服務也將繼續在后台運行。 此外,組件可以綁定到服務以與其進行交互,甚至可以執行進程間通信(IPC)(...)

另外,Android的文檔指出:

當應用程序組件(例如活動)通過調用startService()啟動服務時,將“啟動”服務。 啟動后,即使啟動該服務的組件被破壞,服務也可以無限期在后台運行

因此,檢查在onStartCommand()方法上實現的行為(算法)非常重要,在這種情況下,服務可以無限期在后台運行。 如果執行此操作,則有責任通過調用stopSelf()stopService()在服務完成時停止該服務。

查看Android服務頁面以獲取完整詳細信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM