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)停止定时执行任务。
http://stackoverflow.com/a/11640073/17678002.
2.基于AlarmManager的方法
在Android的API demo中提供了alarmservice使用的详细的例子,在模拟器中可以直接看到apidemo的例子。在eclipse中可以直接导入sdk/samples目录下的ApiDemos工程。如果sdk下没有samples目录,可以通过Android sdk Manager来安装Samples for SDK.
apidemo中和alarm相关的页面如上面三个图所示。图中最上面显示的是activity所在ApiDemos整个应用中的路径。和alarm相关的都在App/Alarm路径下,一共有两个activity,一个是Alarm Controller,一个是Alarm Service。Alarm Controller展示的是通过AlarmManager实现指定未来某个时间执行一项功能、定时执行的设置与清除这三项功能。Alarm Service展示的是通过AlarmManager实现定时打开service的设置于清楚的两项功能。
通过alarm关键字进行搜索,可以发现ApiDemos工程中所有的和alarm相关的类如上图所示。一共有5个类。其中AlarmController.java,AlarmService.java对应主的Activity和AlarmManager的设置。AlarmService_Service.java是AlarmService.java定时唤醒功能所对应的service类。
http://developer.android.com/reference/android/app/AlarmManager.html