2017-07-12 59 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