Android已经提供了一个用于测试service的框架,该测试类即为ServiceTestCase。在对service进行设计的时候就需要考虑到自己的测试用例要测试到service生命周期中的各种状态,当然对service的测试离不开ServiceTestCase中的各种方法。
首先了解一下Service的继承关系,如下图所示,当然还有许多类继承了Service类,如AbstractInputMethodService, AccessibilityService, IntentService, RecognitionService, WallpaperService等。
但是Service到底是用来做什么的?简单来讲Service 用于两种情况:第一种就是在后台完成一系列可能非常耗时的操作,但并不和用户进行交互。比如说我们用手机播放音乐或者传输数据,但同时我们还想干点别的事情,比如看看电子书等,这时就可以将播放音乐或者传输数据等以Service的方式在后台完成,但是并不影响我们看电子书。第二种就是为其他的程序提供一些功能,这种情况下可能会和这些程序保持一种长时间的交互。
在Android中使用Service必须要注意以下几点:
1.每个Service都必须在AndroidManifest.xml中进行声明,一般格式为
2.Service并不是运行在一个独立的进程中,而是运行在程序的主进程中,因此如果Service要处理消耗CPU的工作就应该自己创建一个线程来完成,否则可能会导致程序没有响应。
下面来看一下Service的生命周期。要启动Service有两种方法,分别是Contex.startService(),这种情况下可以调用Context.stopService()来结束服务;另外一种方法是Context.bindService(),这种情况下要调用Context.unbindService()来结束服务,并且多个客户程序都可以bind同一个服务。这两种方法并不是独立的,例如我们可以使用startService()来启动一个在后台播放音乐的服务,这可以通过一个Intent对象来实现,但是当我们想控制音乐的播放或者获取当前歌曲的信息时就需要使用一个Activity通过bindService()方法来同Service建立联系,当一个Service有程序bind的时候即使调用stopService()方法也不会停止服务。具体的生命周期如下图所示:
对于service可以通过在生命周期的方法来监视服务的状态,通过startService()方面启动的服务主要有3个pulbic方法可以实现,其中onStart()方法是其所独有的:
void onCreate()
void onStart(Intent intent)
void onDestroy()
通过bindService()方法启动的服务则可以通过3个额外的方法来监视其状态,分别是:
IBinder onBind(Intent intent)
boolean onUnbind(Intent intent)
void onRebind(Intent intent)
要终止服务可以通过stopService()或者stopSelf()方法,需要注意的是不管服务启动了多少次,一旦调用了这两个方法都会终止服务的运行。
阅读(2674) | 评论(0) | 转发(0) |