如何有效地安排我的服务中的任务?

时间:2017-07-12 14:44:14

标签: java android alarmmanager battery network-connection

我有一项收集数据的服务,以及服务需要每小时将此数据发送到我的服务器。我知道他们有很多可用于安排任务的解决方案,但就我而言,电池消耗和资源利用效率最高的是什么?

我的服务也可以停止,当我的服务停止时,它不能再发送任何数据(所以警报管接缝不是最好的方式,因为它将重新启动我的服务到目前为止据我所知)

2 个答案:

答案 0 :(得分: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);

11PendingIntent的标识符,您可以在其中访问它。

答案 1 :(得分:1)

单独使用警报管理器是不够的。

当网络连接已经在使用中时,您应该发送数据,因为将WiFi或3G / 4G无线电从'#闲置/未使用"到"数据发送/接收"非常耗能。如果设备已经在发送/接收数据,则无需额外的能源成本来激活无线电。

您可以注册一个广播接收器,通知您的应用当前的网络状态。

有关详细信息,请参阅

您的转会策略将是

的混合物
  • alarmmanager
  • 是设备当前正在充电(此时电池并不重要)
  • 是当前有效的广播