你有比這個更大的問題。
我要聽的短信 數據庫更改。
在Android SDK中沒有「短信數據庫」,甚至短信內容提供商。試圖訪問私有專有未公開的未公開的未被記錄的短信應用程序內容將在某些設備上中斷,未來的Android版本將中斷,不會與第三方SMS應用程序一起工作,並且通常是一個糟糕的主意。
BroadcastReceiver啓動 臨時服務,該服務註冊了 ContentObserver。
有沒有這樣的事情作爲臨時Service
其中註冊ContentObserver
。
可能是因爲Service
不是臨時的,所以您的ContentObserver
保持註冊狀態,並且您的Service
未關閉。例如,如果您的BroadcastReceiver
調用startService()
而您的Service
未調用stopSelf()
(例如,它不是IntentService
),則會發生此情況。這並不好,因爲你現在正在制定一個流程。但是,如果你能說服你的用戶確信你正在綁定一個流程,這是最好的答案,並且你的活動可以在活動啓動時重新啓動服務,以確保ContentObserver
是註冊。
這可能是因爲您的ContentObserver
未註冊很長時間,因爲當Service
關閉時,臨時Service
將立即取消註冊,並且服務立即關閉。從內存消費的角度來看,這很棒,但它對於你的目標可能並不是那麼有效。
或者,您可能正在泄漏內存,因爲您註冊了ContentObserver
並關閉了Service
而未取消註冊ContentObserver
。這太可怕了,因爲ContentObserver
將被清除的唯一方式是Android終止該過程。此外,只要感覺像這樣,它會這樣做,因爲就其而言,儘管線程和ContentObserver
和Service
泄漏了,但您不再使用該過程。這最終會導致不可靠的代碼。
謝謝,我會保持業務正常運行,並且活動開始時,然後再用它。它使用stopSelf(),它會導致你提到的問題。 由於「短信內容提供商」的另一點:我搜索了很長時間的解決方案,並沒有適當的記錄解決方案。但是,這是唯一的解決方案,我知道與URI「content://短信」的ContentProvider。目前它適用於所有設備,但必須留在未來的眼中 – ludwigm 2010-01-12 23:54:49