在我工作的應用程序中,我有一個AlarmManager
,它在指定的時間和間隔開始Service
。 Service
使用我在Intent
中發送的一些數據讀取/寫入SQLite數據庫,製作Notification
併發送短信。我遇到了一個問題,當設備進入「深度睡眠」並再次使用該設備時,我得到一個NullPointerException
,的Service
。正如我已經做了一些研究,我有大約Service
是如何工作的,我一直沒能回答以下幾個問題:更好的理解服務
1)我意識到,我用的是過時onStart
方法爲Service
。我打算用START_REDELIVER_INTENT
標誌切換到onStartCommand
標誌(認爲這是我得到的空例外,因爲Service
試圖用舊的onStart
重新啓動,而沒有獲得原始的Intent
)。我的問題是這樣的:我應該把工作Service
做在onStartCommand
或onCreate
嗎?有沒有功能差異?
2)考慮到我在做我的Service
,這是不是足夠的工作來投入自己的Thread
?
3)我需要具體撥打stopSelf
嗎?如果是這樣,哪裏是最好的地方叫它?
4)這一個較爲模糊:據我所知,我已經取消了所有註冊的報警和深睡後,我仍然有一個Service
空例外。即使我從未觸發警報,是否有任何原因Service
仍然可以運行?
如有必要,請諮詢任何澄清問題。我沒有發佈代碼,因爲它大部分是通用的,用於啓動和使用Service
,但如果您想查看,請告訴我。謝謝。
您應該使用IntentService而不是常規的舊服務。它在後臺線程中完成所有工作,並在工作不成功時自動停止。 – smith324 2012-02-27 04:24:55
查看IntentService,看起來它是完美的。如果你想讓這個答案,我會接受它。 – koopaking3 2012-02-27 14:40:04
已添加爲答案。 – smith324 2012-02-27 19:16:01