2012-02-27 79 views
1

在我工作的應用程序中,我有一個AlarmManager,它在指定的時間和間隔開始ServiceService使用我在Intent中發送的一些數據讀取/寫入SQLite數據庫,製作Notification併發送短信。我遇到了一個問題,當設備進入「深度睡眠」並再次使用該設備時,我得到一個NullPointerException,的Service。正如我已經做了一些研究,我有大約Service是如何工作的,我一直沒能回答以下幾個問題:更好的理解服務

1)我意識到,我用的是過時onStart方法爲Service 。我打算用START_REDELIVER_INTENT標誌切換到onStartCommand標誌(認爲這是我得到的空例外,因爲Service試圖用舊的onStart重新啓動,而沒有獲得原始的Intent)。我的問題是這樣的:我應該把工作Service做在onStartCommandonCreate嗎?有沒有功能差異?

2)考慮到我在做我的Service,這是不是足夠的工作來投入自己的Thread

3)我需要具體撥打stopSelf嗎?如果是這樣,哪裏是最好的地方叫它?

4)這一個較爲模糊:據我所知,我已經取消了所有註冊的報警和深睡後,我仍然有一個Service空例外。即使我從未觸發警報,是否有任何原因Service仍然可以運行?

如有必要,請諮詢任何澄清問題。我沒有發佈代碼,因爲它大部分是通用的,用於啓動和使用Service,但如果您想查看,請告訴我。謝謝。

+1

您應該使用IntentService而不是常規的舊服務。它在後臺線程中完成所有工作,並在工作不成功時自動停止。 – smith324 2012-02-27 04:24:55

+0

查看IntentService,看起來它是完美的。如果你想讓這個答案,我會接受它。 – koopaking3 2012-02-27 14:40:04

+0

已添加爲答案。 – smith324 2012-02-27 19:16:01

回答

2

您應該使用IntentService而不是普通舊服務。它在後臺線程中完成所有工作,並在工作不全時自動停止。