【发布时间】:2019-11-29 06:31:37
【问题描述】:
我正在通过 AlarmManager 开发调度,周期为 500 毫秒 但是当运行周期为 1000 毫秒时
这是我的代码:
public class SchedulerAlarm extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
Log.d(TAG, "onReceive enter");
AlarmManager am =( AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(context, Layer2_SchedulerAlarm.class);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
//am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1 * 2 * 1, pi); // Millisec * Second * Minute
am.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.currentThreadTimeMillis() + 500, pi);
}
public void setAlarm(Context context)
{
Log.d(TAG, "setAlarm enter");
AlarmManager am =(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(context, Layer2_SchedulerAlarm.class);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
am.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + 500, pi);
}
}
public class Myervice extends Service {
SchedulerAlarm SchedulerAlarm scheduler = new Layer2_SchedulerAlarm();
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
LibJNIWrapper.selectGW(0);
Log.d(TAG, "onStartCommand enter");
scheduler.setAlarm(this);
return START_NOT_STICKY;
}
}
Manifest:
<receiver android:name=".Layer2_SchedulerAlarm"></receiver>
这是运行时的结果,循环进入onReceive大约1000ms(不要我期望是500ms)
11-29 13:26:56.921 4938-4938/com.joydus.aimon D/TEST: onReceive enter
11-29 13:26:57.954 4938-4938/com.joydus.aimon D/TEST: onReceive enter
11-29 13:26:58.994 4938-4938/com.joydus.aimon D/TEST: onReceive enter
11-29 13:27:00.049 4938-4938/com.joydus.aimon D/TEST: onReceive enter
11-29 13:27:01.080 4938-4938/com.joydus.aimon D/TEST: onReceive enter
11-29 13:27:02.099 4938-4938/com.joydus.aimon D/TEST: onReceive enter
请给点建议。
【问题讨论】:
-
不要将
AlarmManager用于那么小的间隔。
标签: android alarmmanager scheduling