安装了AlarmManager的Android服务在几天后停止调用

时间:2017-02-20 13:12:04

标签: android android-intent scheduled-tasks alarmmanager android-pendingintent

我一直在尝试使用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呼叫,该呼叫与上述代码相同。

我错过了什么吗?对于这种类型的常量重复执行,是否有比上述任何一种方法更好的方法?

1 个答案:

答案 0 :(得分:0)

根据开发者网站:

  

注意:从API 19(KITKAT)开始,警报传递不准确:操作系统将移动警报以最小化唤醒和电池使用。有新的API支持需要严格交付保证的应用程序;请参阅setWindow(int,long,long,PendingIntent)和setExact(int,long,PendingIntent)。 targetSdkVersion早于API 19的应用程序将继续查看之前的行为,其中所有警报都在请求时准确传递   块引用

see more

希望它会有所帮助