美文网首页
Android AlarmManager定时重复任务(心跳)不

Android AlarmManager定时重复任务(心跳)不

作者: new和光同尘 | 来源:发表于2021-07-06 10:03 被阅读0次

    自动化过程中会有一些长时间的任务,每隔一段时间进行一次操作,类似于每天早上的叫醒闹钟,网上找了多个方法介绍的都是AlarmManage,方法如下,只需要在服务启动的时候调用一下,就会有隔一段时间服务自己调自己重置服务:

    private void keepAlives() {
            Intent i = new Intent();
            i.setClass(this, MyService.class);
            PendingIntent pi = PendingIntent.getService(this, 0, i, 0);
            AlarmManager alarmMgr = (AlarmManager) this.getSystemService(ALARM_SERVICE);
            alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP,
                    System.currentTimeMillis() + 180*1000,
                    180*1000, pi);
        }
    

    AlarmManager.setRepeating()方法来实现。在API 19(即Kitkat)之后,这种方式虽然能够唤醒,但是时间不准,我找到了另外一个方法AlarmClock,使用的是RTC唤醒,所以比较准时,类似于闹钟,又只能在API21上使用,所以加了一个注解

        @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
        public void keepAlives(){
            AlarmManager manager = (AlarmManager) getSystemService(ALARM_SERVICE);
            long TriggerAtTime = System.currentTimeMillis() + 180*1000;
            Intent i = new Intent(this, MyService.class);
            PendingIntent pi = PendingIntent.getService(this, 0, i, 0);
            if (manager == null) throw new AssertionError();
            manager.setAlarmClock(new AlarmManager.AlarmClockInfo(TriggerAtTime, pi), pi);
        }
    

    相关文章

      网友评论

          本文标题:Android AlarmManager定时重复任务(心跳)不

          本文链接:https://www.haomeiwen.com/subject/nanztltx.html