我正在使用 Android AlarmManger 安排 IntentService 在较小的间隔后运行。
这是我的 AlarmManger:
static void setNextSchedule(Context ctx, long interval){
AlarmManager manager = (AlarmManager) ctx.getSystemService(Context.ALARM_SERVICE);
Intent nIntent = new Intent(ctx, DService.class);
PendingIntent pIntent = PendingIntent.getActivity(ctx, 1, nIntent, PendingIntent.FLAG_UPDATE_CURRENT);
manager.setRepeating(AlarmManager.ELAPSED_REALTIME,
SystemClock.elapsedRealtime() + interval, interval, pIntent);
Log.i(ScheduleAlarm.class.getSimpleName(), "Next alarm set");
}
还有我的 IntentService:
@Override
protected void onHandleIntent(Intent intent) {
Log.i(DService.class.getSimpleName(), "Service starting");
ScheduleAlarm.setNextSchedule(getApplicationContext(), 15000);
}
目前它只包含用于测试的代码。 现在,一旦应用程序启动,这段代码将成功运行,没有任何问题,但 15 秒后,它会在 logcat 中声明服务正在启动,但代码不会执行。
如何在每次运行时获取互联网服务并执行onHandleIntent
中的代码?
谢谢
最佳答案
当使用 PendingIntent
时,工厂方法需要匹配您的 Intent
适用的组件类型:
如果您的
Intent
指向一个 Activity ,请使用getActivity()
如果您的
Intent
指向服务,请使用getService()
如果您的
Intent
指向BroadcastReceiver
,请使用getBroadcast()
如果您的
Intent
指向以上任何一个,直接进 jail ,不通过 Go!,不收取 200 美元:-)
关于Android IntentService 只执行一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21648292/