我有一项收集数据的服务,以及服务需要每小时将此数据发送到我的服务器。我知道他们有很多可用于安排任务的解决方案,但就我而言,电池消耗和资源利用效率最高的是什么?
我的服务也可以停止,当我的服务停止时,它不能再发送任何数据(所以警报管接缝不是最好的方式,因为它将重新启动我的服务到目前为止据我所知)
答案 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);
11
是PendingIntent
的标识符,您可以在其中访问它。
答案 1 :(得分:1)
单独使用警报管理器是不够的。
当网络连接已经在使用中时,您应该发送数据,因为将WiFi或3G / 4G无线电从'#闲置/未使用"到"数据发送/接收"非常耗能。如果设备已经在发送/接收数据,则无需额外的能源成本来激活无线电。
您可以注册一个广播接收器,通知您的应用当前的网络状态。
有关详细信息,请参阅
您的转会策略将是
的混合物