Tags: android
原文:https://guides.codepath.com/android/Repeating-Periodic-Tasks


在应用程序中使用”定时任务”是一种常见的需求,例如”定时从网络上获取新数据”,”运行一些动画”或者”定时更新UI”.通常有以下几种实现方法:

  1. Handler: 在UI线程上定制运行一个Runnable对象;
  2. ScheduledThreadPoolExecutor: 使用后台线程池执行任务
  3. AlarmManager: 让service在后台执行定时任务
  4. TimerTask: 不可靠,在非UI线程上运行.不建议使用(原因见: http://www.mopri.de/2010/timertask-bad-do-it-the-android-way-use-a-handler/)

以下一一介绍下1,2和3三种方法.

Handler

需要创建Handler对象,然后向消息队列里发送消息.


代码如下:

// 创建Handler对象Handler handler = new Handler();// 定义要执行的runnable对象private Runnable runnableCode = new Runnable() {    @Override    public void run() {      // 做一些事情      Log.e("Handlers", "Called");      // 2秒后再次执行      handler.postDelayed(runnableCode, 2000);    }};// 立即开始第一次执行handler.post(runnableCode);

删除正在执行的任务:

handler.removeCallbacks(runnableCode);

注意使用Handler是在UI线程上执行Runnable对象的.

ScheduledThreadPoolExecutor

例子代码:

class MyTask implements Runnable {  @Override  public void run() {    System.out.println("Hello world");  } }ScheduledThreadPoolExecutor exec =     new ScheduledThreadPoolExecutor(1);// 方式一long period = 100; exec.scheduleAtFixedRate(    new MyTask(), 0, period, TimeUnit.MICROSECONDS);//方式二long delay = 100; exec.scheduleWithFixedDelay(    new MyTask(),0, delay, TimeUnit.MICROSECONDS);

了解更多: https://codelatte.wordpress.com/2013/11/13/49/

AlarmManager

即使应用处于后台,使用这种方法也可起效.
详见: https://guides.codepath.com/android/Starting-Background-Services#using-with-alarmmanager-for-periodic-tasks

更多相关文章

  1. android 实用代码片段整理
  2. Android之Handler用法总结
  3. Android(安卓)Thread 介绍与实例
  4. Android的Handler及looper
  5. 线程安全
  6. Android(安卓)UI开发第七篇之Android(安卓)Gallery
  7. Android(安卓)性能优化实例
  8. Android的bitmap和优化
  9. [置顶] android 下载

随机推荐

  1. Linux下Android(安卓)SDK中adb找不到的解
  2. Android(安卓)蓝牙开发(九)A2DP基本功能
  3. Android(安卓)SDK下载和更新失败的解决方
  4. ScrollView拉到尽头时出现阴影的解决方法
  5. Android(安卓)访问Webservice接口,参数对
  6. Android(安卓)导入项目时遇到的JNI和NDK
  7. android 2.3 wifi (二)
  8. Android(安卓)Camera对焦相关
  9. android从sdcard加载.9.png图片
  10. android 连接服务器的方法及安全性问题