APP下载

基于Android平台定时任务的设计与实现

2016-03-14陈立佳唐山学院唐山063020

电子测试 2016年13期
关键词:唐山闹钟广播

陈立佳(唐山学院,唐山,063020)



基于Android平台定时任务的设计与实现

陈立佳
(唐山学院,唐山,063020)

摘要:随着Android系统手机的普及,越来越多的软件开发者投入到Android平台编程的队伍中。在项目开发时,经常会被要求实现定时任务功能,而Android平台下实现定时任务的方法有很多,各有优缺点。本文重点介绍基于系统时钟(AlarmManager)来实现定时任务并以状态栏通知(NotificationManager)的方式通知用户的功能设计与实现。

关键词:Android;定时任务;AlarmManager,NotificationManager

0 引言

在Android软件开发中,我们经常会遇到定时任务、周期任务、定时提醒、周期提醒等功能需求,这些需求的实现有很多种方法,各有优缺点。

常用的实现定时任务的方式有:

采用Handler与线程的sleep(long)方法

采用Handler的postDelayed(Runnable, long)方法

采用Handler与timer及TimerTask结合的方法

上述三种方法各有优缺点,共同的缺点就是需要占用系统资源同时比较耗电,还有一个缺点是时间准确性的不好掌握。

本文从程序的性能以及时间的准确性为出发点,设计通过使用Android系统本身提供的AlarmManager来实现定时功能,而任务的实现,可以通过Receiver来完成,同时实现了任务状态提醒功能(通过调用系统闹铃以及状态栏通知的功能)。

1 AlarmManager

AlarmManager是Android系统提供的在特定的时刻为我们广播一个指定的Intent。该功能是基于系统时钟的,简单的说就是我们设定一个时间,然后在该时间到来时,larmManager为我们广播一个我们设定的Intent。然后用户设置一个Receiver用来接收处理相应的定时任务。

AlarmManager提供了四种唤醒方式来设置定时任务:

ELAPSED_REALTIME,在指定的延时过后,发送广播,但不唤醒设备。

ELAPSED_REALTIME_WAKEUP ,在指定的延迟后,发送广播,并唤醒设备。

RTC,在指定的时刻,发送广播,但不唤醒设备 。

RTC_WAKEUP,在指定的时刻,发送广播,并唤醒设备。

用户可以根据自己项目的需求灵活的定制闹钟类型,但用的最多的是RTC_WAKEUP。

设置定时的方式也有多种,具体如下:

void set(int type, long triggerAtTime,PendingIntent operation) ,设置一个闹钟, triggerAtTi

me表示闹钟据现在多少毫秒之后发生

void setRepeating(int type, long triggerAtTime,long interval, PendingIntent operation) ,设置一个会重复的闹钟,triggerAtTime表示多少毫秒之后发生,interval表示间隔这么长时间后继续产生闹钟事件

取消定时的方式只有一种:

void cancel(PendingIntent operation)。

2 AlarmReceiver

AlarmReceiver为自定义并继承了BroadcastReceiver的类。在 该 类中,必 须要重载 的 函 数为public void onReceive(Context context, Intent intent)。在onReceive函数中实现接收到定时的广播后,如何将定时任务中的任务继续的完成下去。

继续上述实例,在onReceive函数中主要的代码如下:

manager = (NotificationManager) context. getSystemService(NOTIFICATION_SERVICE);

Intent playIntent = new Intent(context,MainActivity.class);

PendingIntent pIntent = PendingIntent. getActivity(context, requestCode, playIntent,PendingIntent.FLAG_UPDATE_CURRENT);

NotificationCompat.Builder builder = new NotificationCompat.Builder(context);

builder.setContentTitle("xx"). setContentText(remind)

.setContentIntent(pendingIntent)

.setDefaults(Notification.DEFAULT_ALL). setAutoCancel(true);

manager.notify(requestCode, builder.build());

3 多定时任务的实现

如果要实现多定时任务,则需要在上述代码中考虑requestCode。在AlarmManager类中,识别不同定时任务的关键在于requestCode,如果每次执行的定时任务都是同一个requestCo

de,那么会用最后设置的定时任务覆盖之前的定时任务。

在状态栏提示时,也要考虑requestCode的问题,关键在于manager.notify(requestCode, builder.build())这句代码。如果多次调用该语句,而每次调用时requestCode值相同,则之会在用户的状态提示栏里出现一个通知,也就是最后一次调用产生的通知。

综上所述,该requestCode值无论是注册定时任务,还是显示定时任务的执行状态或结果,都是至关重要的。requestCode值必须是整型值,怎么能保证这个值在项目执行时的唯一性,方法有很多,有一个比较简单的方式,可以用当前系统时间来表示这个唯一值。

4 总结

本文通过AlarmManager实现Android系统下多定时任务的功能,是从实际使用和省电的角度考虑,这样做确实比较合理。没有自定义线程或后台服务,减少了用户手机的资源使用。但是由于Android手机厂商的Rom很多都是深度定制,而他们在定制时加入了很多“优化”措施,所以,可能导致了实际开发中会遇到形形色色的bug,出现这种情况,只能是由开发者根据实际出现的问题去查找解决方案了。本文只是适合于大多数情况。

参考文献

[1]吴亚峰,索依娜.Android核心技术与实例讲解.电子工业出版社.2010

[2]韩超.Android经典应用程序开发[J].人力资源出版社.2011

Based on the design and implementation of the Android platform timing task

Chen Lijia
(TangShan,University,Tang Shan,063020)

Abstract:With the popularity of Android mobile phones,more and more software developers into the Android platform programming team.In project development,will often be asked to achieve timing task function,and the method to realize the timing of the Android platform has a lot of,each have advantages and disadvantages.This article focuses on to achieve timing task based on the system clock(AlarmManager)and a notification in the status bar(NotificationManager)way to inform the user function design and implementation.

Keywords:Android;timing task;AlarmManager;NotificationManager

猜你喜欢

唐山闹钟广播
多彩创意闹钟
中国农业发展银行唐山分行
中国农业发展银行唐山分行
唐山香酥饹馇圈
天然闹钟
小闹钟的提醒
能帮我设个闹钟不等四则
广播发射设备中平衡输入与不平衡输入的转换
王大根
网络在现代广播中的应用