2010-01-12 76 views
1

我已經在我的應用程序中註冊了一個BOOT_COMPLETED接收器,我想監聽SMS數據庫的更改。如何通過Boot_completed接收器通知您的(未啓動的)應用程序?

BroadcastReceiver啓動一個註冊ContentObserver的臨時服務。 現在我想通知我的主要活動(未開始)觀察員註冊成功。 (我想這樣做,因爲如果用戶第一次安裝應用程序,他不會重新啓動他的手機,但也需要ContentObserver。如果您有另一個想法如何做到這一點,您可以發佈它,我只是想觀察者已經被註冊)信息

我的想法是,通知與靜態屬性活動: MyActivity.sObserverRegistered =真

但我認爲這是不好的,不會因爲活動ISN工作沒有開始,這被忽略。任何想法如何解決這個問題?

謝謝

回答

1

你有比這個更大的問題。

我要聽的短信 數據庫更改。

在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終止該過程。此外,只要感覺像這樣,它會這樣做,因爲就其而言,儘管線程和ContentObserverService泄漏了,但您不再使用該過程。這最終會導致不可靠的代碼。

+0

謝謝,我會保持業務正常運行,並且活動開始時,然後再用它。它使用stopSelf(),它會導致你提到的問題。 由於「短信內容提供商」的另一點:我搜索了很長時間的解決方案,並沒有適當的記錄解決方案。但是,這是唯一的解決方案,我知道與URI「content://短信」的ContentProvider。目前它適用於所有設備,但必須留在未來的眼中 – ludwigm 2010-01-12 23:54:49

相關問題