1. CounDownTimer浅析
    CounDownTimer(long millisInFuture, long countDownInterval),但是如果使用不当,常常会报空指针异常?

通过源码分析,CounDownTimer的内部实现是采用Handler机制,通过sendMessageDelayed延迟发送一条message到主线程looper中,然后在自身中收到之后判断剩余时间,并发出相关回调,然后再次发送message的方式。由于它存在在Activity或者Fragment被回收时并未调用CounDownTimer的cancel()方法结束自己,那么CoundownTimer方法中会继续执行,回调onTick(),如果该方法中使用Fragment的变量已经是null,就会出现空指针了。

Android中定时任务一般有两种实现方式,一种是Java中的Timer类,一种是Android中的Alarm机制。

这两种方法在多数情况下实现 方式类似,但是Timer不适合那些需要长期在后台运行的定时任务,其实为了让手机省电,任何手机都会有休眠策略。如手机长时间未操作进入休眠状态,当进入休眠状态时,可能会导致Timer中的定时任务无法正常运行;而Alarm机制就不会出现这种情况,因为它具有唤醒CPU的功能,但要注意唤醒CPU和唤醒屏幕不是一个概念。

Alarm实现

首先通过Context的getSystemService()方法来获取AlarmManager实例,这里需要传入ALARM_SERVICE

接下来使用AlaramManager的set()方法就可以设置一个定时任务,如设置任务在5s之后执行,就可以写成:

``

long trrigerAtTime = SystemClock.elapsedRealtime()+5*1000;manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,trrigerAtTime,pi);

其中set()方法的第一参数指定AlarmManager的工作类型,有四种,分别是ELAPSED_WAKE,ELAPSED_WAKEUP\RTC\RTC_WAKEUP。其中ELAPSED_WAKE是任务触发事件从系统开机时间开始算起,但不会唤醒CPU。ELAPSED_WAKEUP,表示会唤醒CPU,并从系统开机时间开始算起。RTC,表示任务的触发时间从1970.1.1日0点开始算起,不唤醒CPU;RTC_WAKEUP,唤醒CPU.
第三个参数是一个PendingIntent,这里一般会调用getBrodcast()获取一个能够执行广播的PendingIntent,这样任务触发时,广播的onReceive()方法可以得到执行。

更多相关文章

  1. Android(安卓)sdk配置 常见问题及处理方法
  2. android EventBus源码解析
  3. Android(安卓)jni GetFieldID 和 GetMethodID 函数的说明
  4. 修改Android模拟器RAM大小方法
  5. 【译】Android(安卓)6.0接口变化(一)(Android(安卓)6.0 Changes)
  6. android自定义Adapter
  7. Android获取View的宽高与View.measure详解
  8. Android(安卓)Camera 二 JNI JAVA和C/CPP图像数据传输流程分析
  9. Android(安卓)官方架构组件(一)——Lifecycle

随机推荐

  1. Android(安卓)Activity接收Service发送的
  2. Android本地图片加载展示而不容易OOM的办
  3. 解决小米、红米及其他 Android(安卓)手机
  4. Android Studio开发Android问题集【持续
  5. Android拨打电话的两种实现方法
  6. Android错误之(Android 6.0)Unable to ad
  7. 开发Android应用程序来使用硬件访问服务
  8. Android 实现视频录制播放
  9. Android Studio 引入uiautomator 问题:Man
  10. android用代码获取布局文件