2017-07-12 56 views
1

我有收集數據的服務,並且每個小時服務都需要將這些數據發送到我的服務器。我知道他們有很多可用於安排任務的解決方案,但在我的情況下,關於電池消耗和資源利用率的最有效方法是什麼?如何有效地安排我的服務中的任務?

也是我的服務能夠被停止,而當我的服務已停止,那麼它不能再發送任何數據(所以alarmmanager縫是不是最好的方法,因爲它會據我所知重新啓動我的服務)

+0

任何形式的「任務」,如果你的服務停止你實現將需要明確停止就像報警經理想,但你應該考慮的jobscheduler – tyczj

回答

1

通過AlaramManager進行安排是完全正常的,因爲您也可以取消計劃任務。

它可能看起來像這樣

AlarmManager alarm = (AlarmManager) getSystemService(ALARM_SERVICE); 
Intent intent = new Intent(getApplicationContext(), YourService.class); 
alarm.set(
    AlarmManager.RTC_WAKEUP, 
    System.currentTimeMillis() + DateUtils.HOUR_IN_MILLIS, 
    PendingIntent.getService(getApplicationContext(), 11, intent, PendingIntent.FLAG_UPDATE_CURRENT) 
); 

,並取消它可以像這樣

AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
Intent myIntent = new Intent(getApplicationContext(), YourService.class); 
PendingIntent pendingIntent = PendingIntent.getService(getApplicationContext(), 11, myIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
alarmManager.cancel(pendingIntent); 

11做的是爲PendingIntent中,你可以得到它的訪問標識符。

+0

感謝穆拉特我會看看 – loki

+0

這會打電話給我的服務onStartCommand? – loki

+0

@loki是的,在這裏閱讀更多關於[服務](https://developer.android.com/reference/android/app/Service.html#ServiceLifecycle) –

1

使用單獨的報警管理是不夠的。

你應該把你的數據時,networkconnection已經被激活使用,因爲從「空閒/未使用」移位WiFi或3G/4G無線電臺,以「數據發送/接收」是非常昂貴的能源。如果設備已經發送/接收數據,則不需要額外的能源成本來激活收音機。

可以註冊,通知您對當前的網絡狀態應用的廣播接收機。

欲瞭解更多詳情,請參閱

您的轉移戰略將是

  • alarmmanager
  • 的混合物的裝置是CURR ently充電(所以電池是不是在這一刻並不重要)
  • 是無線電當前活動
+0

我完全同意你,但如何做到這一切?任何樣品? – loki

+0

請參閱https://developer.android.com/training/efficient-downloads/efficient-network-access.html – k3b

+0

我閱讀文檔,但沒有任何解釋我該怎麼做:(只是說你說什麼(以及什麼我已經知道了,這個問題的目的),我需要知道的是如何實現它:(如何有效地通過網絡與警報管理器發送數據,例如,如果當alam解僱他們時沒有網絡連接,更好等待一個網絡連接,但如何做到這一點 – loki