我一直在尝试使用AlarmManager类安排Android服务重复运行,但服务在几天后停止调用。最初我一直在使用下面的代码来尝试实现这个目标:
rabbitmqctl set_permissions -p / username ".*" ".*" ".*"
与接收者:
Intent alarmIntent = new Intent(currentActivity.getApplicationContext(), AlarmReceiver.class);
PendingIntent pendingAlarmIntent = PendingIntent.getBroadcast(currentActivity.getApplicationContext(),
AppManager.ALARM_PENDING_INTENT_REQUEST_CODE,
alarmIntent,
PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager alarmManager = (AlarmManager)currentActivity.getApplicationContext().getSystemService(Context.ALARM_SERVICE);
alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP,
System.currentTimeMillis(),
interval,
pendingAlarmIntent);
这工作了几天然后突然停了下来。所以我将代码更改为最初广播到接收器一次,然后每次运行服务时重新向接收器广播。我用以下代码完成了这个:
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context _context, Intent _intent){
Intent serviceIntent = new Intent(_context.getApplicationContext(), PostLocationService.class);
_context.getApplicationContext().startService(serviceIntent);
}
}
不幸的是,结果相同;服务在几天后停止执行。
我还注册了一个接收器,用于设备启动时重新启动AlarmManager呼叫,该呼叫与上述代码相同。
我错过了什么吗?对于这种类型的常量重复执行,是否有比上述任何一种方法更好的方法?
答案 0 :(得分:0)
根据开发者网站:
注意:从API 19(KITKAT)开始,警报传递不准确:操作系统将移动警报以最小化唤醒和电池使用。有新的API支持需要严格交付保证的应用程序;请参阅setWindow(int,long,long,PendingIntent)和setExact(int,long,PendingIntent)。 targetSdkVersion早于API 19的应用程序将继续查看之前的行为,其中所有警报都在请求时准确传递 块引用
希望它会有所帮助