Java AlarmManager不总是执行

Java AlarmManager不总是执行,java,android,alarmmanager,android-pendingintent,android-broadcastreceiver,Java,Android,Alarmmanager,Android Pendingintent,Android Broadcastreceiver,我正在开发一款android应用程序,每5分钟向服务器发送一次帖子,这样服务器就可以检查手机是否连接 我正在使用AlarmManager,向BroadcastReceiver发送广播PendingEvent,后者向服务器发送post。问题是它并不总是执行: Intent myIntent = new Intent(Inicio.this, NetworkStatusReceiver.class); PendingIntent pendingIntent = PendingIntent.getBr

我正在开发一款android应用程序,每5分钟向服务器发送一次帖子,这样服务器就可以检查手机是否连接

我正在使用
AlarmManager
,向
BroadcastReceiver
发送广播
PendingEvent
,后者向服务器发送post。问题是它并不总是执行:

Intent myIntent = new Intent(Inicio.this, NetworkStatusReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(Inicio.this,
                                                         0,
                                                         myIntent,
                                                         0);
AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
int interval = 60000*5;
manager.setRepeating(AlarmManager.RTC_WAKEUP,
                     System.currentTimeMillis(),
                     interval,
                     pendingIntent);
AlarmManager
类是正确的方法吗


因为我一直在研究5.0+android版本,电源管理与早期的android版本不同。也许
AlarmManager.RTC_WAKEUP
选项在5.0+android版本上不起作用。

我做了一些研究,发现了一些似乎有效的方法。从今天早上开始,我实施了它,行为有了很大的改善。我意识到拥有一个
BroadcastReceiver
我可以只设置一次警报,然后在触发警报时在
BroadcastReceiver
本身上再次设置另一个警报

我还为
pendingent
使用了标志
pendingent.flag\u UPDATE\u CURRENT
(因为报警
pendingent
可以从不同的活动触发)

活动
的代码如下:

Intent myIntent = new Intent(context, NetworkStatusReceiver.class);
    final PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, myIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    final AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    manager.set(AlarmManager.RTC_WAKEUP,System.currentTimeMillis() + timeInMillis, pendingIntent);
BroadcastReceiver.OnReceive()
方法的代码将是相同的代码,因此报警会再次触发每个
系统.currentTimeMillis()+timeInMillis
(以这种方式创建
setRepeating()
方法)


通过这种方式,似乎总是会触发警报,因为(我认为)
AlarmManager
中的
set()
方法在任何android版本中都能正常工作。

我做了一些研究,发现了一些似乎有效的方法。从今天早上开始,我实施了它,行为有了很大的改善。我意识到拥有一个
BroadcastReceiver
我可以只设置一次警报,然后在触发警报时在
BroadcastReceiver
本身上再次设置另一个警报

我还为
pendingent
使用了标志
pendingent.flag\u UPDATE\u CURRENT
(因为报警
pendingent
可以从不同的活动触发)

活动
的代码如下:

Intent myIntent = new Intent(context, NetworkStatusReceiver.class);
    final PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, myIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    final AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    manager.set(AlarmManager.RTC_WAKEUP,System.currentTimeMillis() + timeInMillis, pendingIntent);
BroadcastReceiver.OnReceive()
方法的代码将是相同的代码,因此报警会再次触发每个
系统.currentTimeMillis()+timeInMillis
(以这种方式创建
setRepeating()
方法)


通过这种方式,似乎总是会触发警报,因为(我认为)
AlarmManager
中的
set()
方法适用于任何android版本。

它发生在任何特定的手机上吗?@saven该应用程序在具有不同android版本的不同设备上使用。大部分是5.0.2或6.+(有一些旧设备运行4.+,有了这些设备,似乎工作正常!)这是否发生在任何特定的手机上?@saven该应用程序在不同的设备上使用,具有不同的android版本。大部分是5.0.2或6.+(有一些旧设备运行4.+,有了这些设备,似乎工作正常!)