《服务的最佳实践》再实践——定时关闭程序

转载请注明出处:

最近读书读到了安卓的服务组件(再次推荐偶像的书,郭霖《第一行代码》),读过之后,忽然有种想要编写安卓四大组件小案例的冲动。与大家分享的同时,也能考核自己的学习成果。那么今天就开始第一篇吧:《服务的最佳实践》再实践——定时关闭程序。

作为一名传统的程序猿,编程之前首先想到的是设计需求:仿照一些播放器软件,可以定时关闭应用程序,在界面中可以设置定时时间,退出界面后还可以在系统状态栏显示软件运行状态,后台继续运行程序,直到定时结束给出提示关闭软件。就比如下面这个网上随便找的软件:

 

《服务的最佳实践》再实践——定时关闭程序了解了设计需求,软件的设计思路就比较清晰了,无非是几个子功能的组合:界面设置定时时间,前台服务启动,安卓Alarm机制定时,关闭软件和提示。

首先来实现设置定时时间界面,在Eclipse中新建一个Android项目,然后写布局文件,布局比较简单,只需要一个TextView控件和Spinner控件就可以,具体设计根据个人喜好随意,打开activity_main.xml,加入如下代码:

接着需要添加下拉列表项,打开values文件夹下string.xml文件,加入下拉列表item内容,加入如下代码:

以上代码即可实现通过下拉列表选择设置定时时间的功能。界面布局有了,接下来实现前台服务的基本功能。新建AlarmService类继承Service,这个类中会在重写onCreate()方法中设置服务为前台服务,并在onStartCommand()方法中启动Alarm计时,AlarmService.java代码如下:

在onCreate()方法中,先创建了一个通知,将通知作为一个参数传递到startForeground()方法中,这个方法可以将Service变成一个前台服务。关于通知的使用方法可以阅读郭霖《第一行代码》第八章。在onStartCommand()方法中,首先获取一个AlarmManager实例,设置定时时间为1秒钟,并且获取一个广播的PendingIntent 作为参数,当定时任务触发时会广播给应用程序。其实安卓有多种方法可以实现定时任务,使用Alarm机制可以有效避免CPU休眠时造成定时器停止工作,大家可以参考原书郭霖《第一行代码》9.6章节《服务的最佳实践——后台执行的定时任务》中的解释。

接下来需要实现关闭软件和提示的功能了,新建AlarmReceiver类继承BroadcastReceiver,重写onReceive()方法,实现在定时前3秒钟通过Toast提示关闭软件,在定时结束时关闭软件,AlarmReceiver.java 代码如下:

当1秒定时结束时,广播接收器会接收到服务的广播,在onReceive()方法中对tickCount进行累加,通过与定时时间的比较,做出相应的处理。这种方法可以有效实现需求的功能,但是如果长时间定时的话,1秒钟一启动服务感觉会比较浪费资源,但是小弟确实新手,暂时还没有更好的解决方法,以后会继续努力,也请有经验的大神指点指点。

文章写到这里,所有的功能模块都已经完成了,下面需要在主程序中对模块进行整理和调用了,打开MainActivity.java文件,加入如下代码:

来源:愤斗的小鲜肉

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2016年2月24日
下一篇 2016年2月24日

相关推荐