【问题标题】:AlarmManager android can't scheduling with cycle is smaller 1000 milisecondsAlarmManager android 不能以小于 1000 毫秒的周期进行调度
【发布时间】: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


【解决方案1】:

我不知道,你的用例。但是,如果您的应用程序正在后台执行某些操作,并且仅在应用程序打开而不是关闭时。使用Timer

根据我正在使用的库的要求,我使用了 20 毫秒。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-14
    • 1970-01-01
    • 2012-07-07
    • 2011-10-14
    • 2014-01-19
    • 2018-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多