我有收集数据的服务,并且每个小时服务都需要将这些数据发送到我的服务器。我知道他们有很多可用于安排任务的解决方案,但在我的情况下,关于电池消耗和资源利用率的最有效方法是什么?如何有效地安排我的服务中的任务?
也是我的服务能够被停止,而当我的服务已停止,那么它不能再发送任何数据(所以alarmmanager缝是不是最好的方法,因为它会据我所知重新启动我的服务)
我有收集数据的服务,并且每个小时服务都需要将这些数据发送到我的服务器。我知道他们有很多可用于安排任务的解决方案,但在我的情况下,关于电池消耗和资源利用率的最有效方法是什么?如何有效地安排我的服务中的任务?
也是我的服务能够被停止,而当我的服务已停止,那么它不能再发送任何数据(所以alarmmanager缝是不是最好的方法,因为它会据我所知重新启动我的服务)
通过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
中,你可以得到它的访问标识符。
使用单独的报警管理是不够的。
你应该把你的数据时,networkconnection已经被激活使用,因为从“空闲/未使用”移位WiFi或3G/4G无线电台,以“数据发送/接收”是非常昂贵的能源。如果设备已经发送/接收数据,则不需要额外的能源成本来激活收音机。
可以注册,通知您对当前的网络状态应用的广播接收机。
欲了解更多详情,请参阅
您的转移战略将是
任何形式的“任务”,如果你的服务停止你实现将需要明确停止就像报警经理想,但你应该考虑的jobscheduler – tyczj