2012-02-02 52 views
1

我需要您的想法。我正在尋找的是一個任務或服務,運行在後臺(無UI),能夠執行以下操作:Android:用於後臺處理的組件,必須手動啓動

  • 它不應該永久運行,只有當它被調用時。有兩個可能的來電者:
    1. gui/touch應用程序。用戶可以輸入數據,應用程序將這些數據傳遞給數據持久存儲的後臺服務。這可能隨時發生,並定期在Android操作系統上隨機發生。也許AlarmManager是一個合適的方法。當定期(例如,每30秒)調用一次該服務時,它應該處理在步驟1中存儲的數據。處理完成後,它應該停止自己以節省電池。

換句話說: 用戶不觸發處理,用戶只是對輸入負責。 AlarmManager然後定期觸發處理。

Android服務類是適合的還是有更好的方式去?

如果是,我在理解服務類時遇到問題。根據文檔,它沒有自己的進程,但在主機進程中運行。這是否會導致問題?所以有時候,phonegap插件(傳遞數據)是主機進程,有時報警代碼是主機進程,或者我錯了?我的意思是該服務沒有主要應用程序,它可以從不同的位置調用獨立的東西。

感謝

謝謝

回答

2

服務將是適當的在這裏。

您可以安排AlarmManager定期調用您的服務,讓您的UI活動將數據推送到它並可選擇喚醒服務以處理數據。

服務在主機進程中運行,並將在UI線程中運行,除非您創建另一個線程。 IntentService類可以幫助你。 它允許您關閉在工作線程中由服務處理的意圖。

意圖在IntentService類中排隊,並由IntentService管理的單個工作線程輪流處理。

在你的情況下,你可以讓AlarmManager觸發一個Intent,這個Intent將被你的服務在工作線程中處理。

+0

感謝,IntentService看起來很有希望,但我仍然有問題unettanding它。在傳統Java中,當方法A從線程1調用時,方法A在線程1中運行。如果從線程2調用同一對象的相同方法A,則A突然在線程2中運行。然後我必須知道我的對象中的數據。 IntentService的行爲如何?排隊總是發生,不管它被調用哪個線程?服務中的數據是否保存? – ceran 2012-02-02 14:56:06

+0

我已經稍微編輯了我的答案,以解釋Intents如何排隊並且全部在單個工作線程上運行。只要您只在工作線程(onHandleIntent(Intent)方法)內處理它,您的數據就應該是安全的。 – mcnicholls 2012-02-02 15:03:19

+0

另外請確保考慮@herom在他的回答中所說的話。 – mcnicholls 2012-02-02 15:05:25

2

請注意,AlarmManager一旦手機重新啓動就會丟失所有設置的鬧鐘,要重新初始化鬧鐘,通常需要創建一個從BroadcastReceiver派生的OnBootReceiver,以便在手機重新啓動時得到通知。那麼你將不得不再次設置鬧鐘。

相關問題