2013-04-16 132 views
0

我正在構建一個以這種方式工作的應用程序:啓用移動數據或WiFi(如果選中了複選框,則爲WiFi)每Y分鐘X分鐘,然後禁用它。我應該在AlarmManager中使用哪種類型的類型?

我做了什麼:

  • MainActivity:設置AlarmManager(與setRepeating)的執行 AlarmService每個X分鐘。
  • AlarmService:啓用移動數據或無線上網 然後設置一個新的AlarmManager調用DisableMD沿Y分鐘
  • DisableMD:停用移動數據或無線上網

MainActivity是一種活動和AlarmServiceDisableMD是服務。

我的問題:

  1. 是一種服務在這種情況下,最好的方法是什麼?服務在後臺運行,我不需要它。我只需要AlarmManager來調用一次會執行一次操作的類(打開/關閉移動數據)。
  2. 請問AlarmManager用setrepeating每次創建一個新的Service還是隻有一次?
  3. 我需要AlarmService更新MainActivity一個TextView與去年執行的時間和AlarmService得到的MainActivity複選框(true或false)的值。實現一個Messenger非常混亂,這就是我不想在這種情況下使用服務的原因之一。

所以,大家好,能否回答我的問題和/或告訴我應該在我的應用「架構」中更改哪些內容? 感謝

+0

在編程中,很少有*最好的**做**任何事情**的方法,而是一個*最快*或最*痛苦*的方式。找到最適合您的方案的最適合的方案。 –

+0

你的問題是問什麼解決這個問題的「最好方法」是什麼,這可能導致許多人把這個問題作爲「不具有建設性」來解決,因爲它使問題變得主觀。不過,我認爲你的問題有幾點需要足夠具體的答案。你可能想重新提出你的問題以避免關閉。我認爲這裏有一個合理的問題。 – kabuko

+0

無論如何,我想打開/關閉移動數據將是一個快速的行動。我更喜歡最痛苦的方式。 – ruda

回答

1
  1. 真的需要在好像(只是不連續)後臺運行的代碼。你是對的,但Service可能不是必要的。如果您的操作非常快,您可以將其放入BroadcastReceiverThis其他SO線程也可能有所幫助。如果您的工作需要大量時間,則Service可能是您的最佳選擇。
  2. 一般而言,如果您打算通過意向致電Service,那麼如果上一次還活着,那麼將重新使用相同的Service。你需要閱讀docs for Service。生命週期信息在這裏可能特別相關。
  3. 實際上您並不需要AlarmService與您的MainActivity的用戶界面進行交互。看起來你想要的是爲你的MainActivity設置你是在處理WiFi還是移動數據,爲了顯示上一次執行的時間,AlarmService設置上一次執行的時間,以及它是否讀取正在處理WiFi或移動數據。基本上,您有兩個設置,您想要從MainActivityAlarmService中讀取和寫入。考慮簡單地將這些存儲在SharedPreferences中。您可以避免以這種方式在MainActivityAlarmService之間直接通信。
+0

你的BroadcastReceiver仍然會在主線程中運行,所以要麼立即卸載到後臺線程,要麼使用IntentService。 – orip

相關問題