美文网首页
简单的定时刷新和周期刷新的定时器

简单的定时刷新和周期刷新的定时器

作者: _____彬 | 来源:发表于2019-03-05 19:44 被阅读0次

    安卓使用Alarm实现一个简单的定时刷新和周期刷新的定时器

    alarmManger的获得
    AlarmManger am= Context.getSystemService(Context.ALARM_SERVICE)

    一般实现定时器是通过广播的形式进行的。

    1。定时刷新 只刷新一次
    首先要发送一个广播 PendingTintent.getBroadcast()就类似于一个sendBroadcast
    里面有四个参数 第一个就是context 第二个参数是个发送端的私人参数,起区分作用 第三个intent 第四个 flags参数可以指定PendingIntent的一些行为特点,是用来针对Intent.fillIn() ,这里面没有用到0即可。
    PendingTintent 核心就是异步激发 有兴趣的可以看
    PnedingTingtent详解
    am.set()方法用来激发,第一个参数是闹钟的类型 就不赘述了 第二个就是开始时间()
    这个参数的类型要根据前一个闹钟的类型来的 , RTC_WAKEUP RTC POWER_OFF_WAKEUP使用的绝对时间,其他的类型就是相对时间 ,相对时间就是相对于开机时运行的时间,绝对时间就是当前的时间。

            AlarmManager am =  context.getSystemService(Context.ALARM_SERVICE);
            Intent i = new Intent(conext, UpdateReceiver.class);
            i.putExtra("time", time);//time参数是刷新间隔
            PendingIntent pendingIntent = PendingIntent.getBroadcast(contexxt, 0, i, 0);
            //我这个是系统现在时间加上time时间进行刷新
            am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + time, pendingIntent);
        }
    2 然后需要自定义一个接受器刷新的动作在这里面执行
    ```public static class UpdateReceiver extends BroadcastReceiver {
            public void onReceive(Context context, Intent intent) {
                long times=intent.getLongExtra("time",0);
                Toast.makeText(context, "开始刷新"+intent.getLongExtra("time",0), Toast.LENGTH_SHORT).show();
            
            }
        }
    2定时刷新 根据间隔时间一直刷新
    
    类似于闹钟
    am.setRepeating ()第二个参数就是第一次刷新时间 (如果时间已经过了,会马上响应一次),第三个就是间隔时间 。注意此广播非覆盖的 如若要改变刷新时间一定要先取消此广播
    ```public static void sendBroadcastRepeat(Context ctx,int hour,int minuter){
            Intent intent =new Intent(ctx, RepeatReceiver.class);
            intent.putExtra("hour",hour);
            intent.putExtra("minuter",minuter);
            PendingIntent pendingIntent = PendingIntent.getBroadcast(ctx,0, intent, 0);
            Calendar calendar = Calendar.getInstance();
            calendar.set(Calendar.HOUR_OF_DAY, hour);
            calendar.set(Calendar.MINUTE, minuter);
            calendar.set(Calendar.SECOND, 00);
            calendar.set(Calendar.MILLISECOND, 0);
            AlarmManager am = getAlaramManager(ctx);
            am.setRepeating(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(), 1000 * 60 * 60 * 24, pendingIntent);
        }
    同样也要写一个接收器
    ``` public static class RepeatReceiver extends BroadcastReceiver {
            public void onReceive(Context context, Intent intent) {
                Toast.makeText(context, "定时刷新", Toast.LENGTH_SHORT).show();
    
            }
        }
    3不要忘了注册广播
    

    相关文章

      网友评论

          本文标题:简单的定时刷新和周期刷新的定时器

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