Android中设置定时器目前来看有两种方法,一种是基于handler的postDelayed方法,另一种是使用AlarmManager类。根据Android官方的描述

Note: The Alarm Manager is intended for cases where you want to have your application code run at a specific time, even if your application is not currently running. For normal timing operations (ticks, timeouts, etc) it is easier and much more efficient to use Handler.

  也就是说使用第一种handler方法相对简单,在一个应用中定时执行任务的话,使用handler方法比较方便,并且由于是在同一个类中,类的一些变量值都可以在需要定时执行的任务中直接获得。而使用alarm manager的主要场合是在定期唤醒一些系统中本来没有打开的,或者其他的应用。

1.基于handler的postDelayed方法

private Handler handler = new Handler();

private Runnable runnable = new Runnable() 
{

    public void run() 
    {
         // Do the stuff
         handler.postDelayed(this, 1000);
    }
};
runnable.run();

通过handler.removeCallbacks(runnable)停止定时执行任务。

2.基于AlarmManager的方法

  在Android的API demo中提供了alarmservice使用的详细的例子,在模拟器中可以直接看到apidemo的例子。在eclipse中可以直接导入sdk/samples目录下的ApiDemos工程。如果sdk下没有samples目录,可以通过Android sdk Manager来安装Samples for SDK.

android定时器使用方法 android 定时器_android定时器使用方法

 

android定时器使用方法 android 定时器_定时执行_02

  apidemo中和alarm相关的页面如上面三个图所示。图中最上面显示的是activity所在ApiDemos整个应用中的路径。和alarm相关的都在App/Alarm路径下,一共有两个activity,一个是Alarm Controller,一个是Alarm Service。Alarm Controller展示的是通过AlarmManager实现指定未来某个时间执行一项功能、定时执行的设置与清除这三项功能。Alarm Service展示的是通过AlarmManager实现定时打开service的设置于清楚的两项功能。

android定时器使用方法 android 定时器_定时执行_03

  通过alarm关键字进行搜索,可以发现ApiDemos工程中所有的和alarm相关的类如上图所示。一共有5个类。其中AlarmController.java,AlarmService.java对应主的Activity和AlarmManager的设置。AlarmService_Service.java是AlarmService.java定时唤醒功能所对应的service类。