【发布时间】:2023-03-11 08:40:01
【问题描述】:
我一直在尝试使用 AlarmManager 类安排一个 Android 服务重复运行,但几天后该服务停止被调用。最初我一直在使用下面的代码来尝试实现这一点:
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);
}
}
这工作了几天,然后突然停止了。所以我将代码更改为最初向接收器广播一次,然后在每次运行服务时重新广播到接收器。我用以下代码做到了这一点:
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.set(AlarmManager.RTC_WAKEUP,
interval,
pendingAlarmIntent);
不幸的是,这具有相同的结果;几天后服务停止执行。
我还注册了一个接收器,用于在设备启动时重新启动 AlarmManager 调用,与上面的代码相同。
我错过了什么吗?对于这种类型的不断重复执行,是否有比上述任何一种方法更好的方法?
【问题讨论】:
-
您的服务一定是崩溃了。让它在它启动和停止时记录到一个文件或你的网络服务器,这样你就可以知道它是否崩溃了。此外,如果手机正在重启警报丢失,您需要注册一个 BroadcastReceiver 来捕捉 {android.intent.action.BOOT_COMPLETED},为此您需要编辑应用清单文件。 stackoverflow.com/questions/12034357/…
标签: android android-intent scheduled-tasks alarmmanager android-pendingintent