瞿 苏
(江苏联合职业技术学院 扬州商务分院,江苏 扬州 225000)
基于Android中的Service实现视力保护程序
瞿 苏
(江苏联合职业技术学院 扬州商务分院,江苏 扬州 225000)
用户可以在免费手机平台Android上,开发各种对自身使用的APK应用文件, 在开发应用程序过程中, 程序员可以使用Service开发需在后台执行长时间运行操作,并且不提供用户界面的应用程序组件。重点讲述视力保护程序使用Service的过程,该过程首先定义TimeService类和TimeActivity类,关键是在AndroidManifest.xml文件中增加Activity和Service配置,以此调用TimeService的过程而启动服务和停止服务。
Service;视力保护程序; Started Service
1.1 Service应用简介
Service(服务)是能够在后台执行长时间运行操作,并且不提供用户界面的应用程序组件,它是用于在后台完成用户指定的操作,可以用于音乐播放器、文件下载工具等应用程序[1]。用户可以使用其他控件来与进行通信。当用户切换到其他应用程序时,服务依然可以在后台运行,其他应用程序组件可以绑定服务,进程间可以相互通信。例如,服务能在后台处理网络事务、播放音乐、执行文件I/O或者与ContentProvider通信。
1.2 视力保护程序
视力保护程序是一个保护眼睛的手机软件,如果用户当前环境光照强度,智能调节屏幕亮度、实时的保护用户的眼睛,让用户保持最健康的用眼习惯,使眼睛视力总是处于最好状态。
2.1 视力保护程序的实现目的
视力保护程序是一个保护眼睛的手机软件,软件会告诉用户用怎样的方法,可以缓解眼睛疲劳或者其他的眼部问题,用户也能设置提醒,告诉自己什么时候该好好活动休息一下了,达到实时感应的效果。
2.2 项目实现
2.2.1 项目开发环境
开发APK应用程序,对硬件要求较高,Android SDK全部下载大概需要占用4GB硬盘空间,由于开发过程中需要反复重启模拟器,而每次重启都会消耗几分钟时间(视机器配置而定)。
2.2.2 技术使用
(1)Service分类
Service(服务)是从本质上分为两种类型Started(启动)和Bound(绑定)。当应用程序组件通过调用Started Service时,Service为Started状态;当调用bindService()时,Service为bound状态。
(2)创建Started Service
当用户打开音乐播放器、文件下载工具等应用程序时, Service可以在后台完成用户的操作。用户可以使用其他控件来与Service进行通信。
当Service为“started”时,Service可以在后台一直运行,因为其生命周期与启动它的组件无关,所以即使启动它的服务组件被销毁。当服务完成任务后,可以通过stopSelf()或者由其他组件调用stop Service()停止服务。Activity组件可以通过startService()和传递Intent对象来启动服务,服务可以通过onStartCommand()方法接收Intent。Intent对象中包含了服务和服务中所包含的全部数据[2]。
(3)继承IntentService类
大多数启动服务没有必要处理多个请求,因此提出了类。程序员可以使用IntentService类使用了onStartCommand()方法、onHandleIntent()方法、onBind()方法和onStartCommand()方法。
(4)继承Service类
使用IntentService类简化启动服务的实现,然而,如果需要让服务处理多个线程(取代使用工作队列处理启动请求),则可以继承Service类来处理各个Intent[3]。对于每次启动请求,它使用工作线程来执行任务,并且每次处理一个请求。
(5)启动服务
程序员可以通过Activity启动服务,也可以通过其他应用程序组件,传递Intent对象到startService()方法启动服务。Android系统调用服务的onStartCommand()方法并将传递给它。startService()方法立即返回,然后系统调用服务的onStartCommand()方法。如果服务还没有运行,系统首先调用onCreat()方法,接着调用onStartCommand()方法。
当服务没有提供绑定时,Intent 应用程序组件和服务之间,唯一的通信模式是StartService()。然而,如果开发人员需要服务返回结果,则启动该服务的客户端,能为广播创建pendingIntent(使用getBroadcast()方法),并通过启动服务的Intent进行发送。服务接下来便能使用广播来发送结果。启动服务如果被多次请求,则Service的onStartCommand()方法会被多次调用。
(6)停止服务
启动服务必须管理自己的生命周期,即系统不会停止或销毁服务,除非系统必须回收系统内存,而且在 onStartCommand()方法返回后,服务继续运行。
Service如何停止服务呢?它可以调用stopSelf()方法停止自身和调用stopService(),当调用以上两种方法请求时,系统会尽快销毁服务。如果同时遇到多个onStartCommand()请求时,系统不会立刻停止服务,因为可能会收到新的启动请求。
为了解决这个问题,开发人员可以使用stopSelf(int)方法,来确保停止服务的请求总是基于最近收到的启动请求,并将启动请求的ID传递给停止请求。这样,如果服务在调用stopSelf(int)方法前接收到新启动请求,会因ID匹配而不停止服务。应用程序应该在任务完成后停止服务,来避免系统资源浪费和电池消耗。即使某些情况下绑定服务,只要调用onStartCommand()方法就必须停止服务。
(7)管理Service的生命周期
用户经常在不知情的情况下,服务在后台运行。开发人员需明白服务如何销毁,因此提出了服务的生命周期。服务的生命周期可以分成两个不同的路径:Started Service:当其他组件调用startService()方法时,服务被创建。当服务停止时,系统将其销毁;Bound Service:当其他组件调用bindService()方法时,服务被创建。接着客户端通过IBinder接口与服务通信。客户端通过unbindService()方法关闭连接。
这两条路径并非完全独立,即开发人员可以绑定已经使用startService()方法启动的服务。stopService()和stopSelf()方法直到全部客户端解绑定时才能停止服务。
3.1 在Eclipse中创建Android项目,当应用程序运行1分钟后,显示提示信息,提醒用户保护视力。
修改reslayout目录中的main.xml文件,定义应用程序的背景图片和一个文本框。
3.2 在com.mingrisoft包中,定义TimeService类,它继承Service类。在onStart()方法中,使用Timer类完成延时操作,在一个新线程中创建消息,并且在60秒后运行。
3.3 在com.mingrisoft包中,定义TimeActivity类,它继承Activity类,在onCreate()方法中,启动服务。
3.4 修改AndroidManifest.xml文件,增加Activity和Service配置。
3.5 程序编写完成,启动应用程序,提示1分钟后显示。
本文重点讲述了开发视力保护程序使用Service的过程,整个过程,首先定义了继承Service类的TimeService类,和继承Activity类的TimeActivity类,两类的目的分别是用onStart()方法,实现60秒后运行通知信息和onCreate()方法实现启动服务,再者在AndroidManifest.xml文件中增加Activity和Service配置,以此调用TimeService的过程而启动服务和停止服务,同时程序员可根据需求将60秒时间更改,该视力保护程序简单而易操作。本文主要是通过视力保护程序开发的过程介绍了四大组件之一的Service(服务),服务可以分成Started服务和Bound服务两大类。对于Started服务,有两种实现方式:继承IntentService类和继承Service类;对于Bound服务,有两种实现方式:继承Binder类和使用Messenger类。
[1]王寅峰,许志良.AppInventor实践教程——Android智能应用开发前传[M].北京:电子工业出版社,2013:210-230.
[2]David Wolber,Hal Abelson,Ellen Spertus.App Inventor:Create Your Own Android Apps[J].O’Reilly,2011:150-180.
[3]王向辉.可视化开发Android应用程序——拼图开发模式App Inventor[M].北京:清华大学出版社,2013:231-253.
[4]明日科技.Android从入门到精通[M].北京:清华大学出版社,2015:384-412.
Eyesight Protection Program Based on the Android Service Implementation
QU Su
(Yangzhou Business Branch of Jiangsu United Vocational and Technical College,Yangzhou,Jiangsu 225127)
Users can develop various APK applications for their own use for free on Android mobile phone platform. In the process of developing the application, the programmer can use the service development in the background of executive time and does not provide a user interface for operating the application components. This article focuses on the process of visual acuity protection programs using the service process. The process first defines Time Service class and Time Activity class. The key of the process is increasing the Activity and the Service configuration in the AndroidManifest.xml file, then call Time Service, start service and stop service.
service; eyesight protection program; started service
2016-10-09
瞿 苏(1982-),女,江苏扬州人,讲师,硕士。研究方向:计算机应用技术。
R77
A
1008-8156(2016)04-0064-04
修回日期:2016-11-22