安卓四大组件学习之Service

Service

按官方原文档所说:Service是一个没有界面在后台执行耗时操作的应用组件。其他组件能够启动Service,并且当用户切换到相应的应用场景,Service一样能在后台持续运行。另外一个组件还能绑定到Service与之交互(IPC通信),所有这些活动都是在后台进行的,Service有两种状态“启动的”和“绑定的”。

Service的生命周期

Service的生命周期有2种:

调用StartService():onCreate->onstart->onStartCommand->onDestroy

调用BindService():onCreate->onBind->onUnBind->onDestroy

通过startService启动服务处于“启动的”状态,这个时候不管启动它的组件是否销毁,Service会一直在后台运行。通常started状态的Service执行单任务,并且不回任何结果给启动者,比如当下载或上传一个文件时,当任务完成Service就应该停止。

通过Bind启动的服务处于“绑定的”状态,这种方式一般结合AIDL使用(IPC通信机制)。


AIDL的实现步骤:

(1)在Eclipse Android工程的Java包目录中建立一个扩展名为aidl的文件。该文件的语法类似于Java代码,但会稍有不同。
(2)如果aidl文件的内容是正确的,ADT会自动生成一个Java接口文件(*.java)。
(3)建立一个服务类(Service的子类)。
(4)实现由aidl文件生成的Java接口。
(5)在AndroidManifest.xml文件中配置AIDL服务,尤其要注意的是,<action>标签中android:name的属性值就是客户端要引用该服务的ID,也就是Intent类的参数值。

特别要注意:如果启动一个服务并且绑定服务,那么在结束服务时必须先解绑再停止服务,直接停止服务Service并不会Destroy掉.

Service与Activity一样都存在当前进程的主线程中,所以不能直接在Service里面进行耗时操作,必须新开子线程。只是说在Serivce里面的线程比在Activity中创建的线程更好管理。

IntentService

IntentService使用队列的方式来处理多个Intent请求,对于异步的Intent请求intentService会开启一个wordThread线程在处理,并且采用队列的模式处理完第一个再处理第二个。(onHandleIntent)

这里就给我们提供了一个思路,与其在Service开启新线程进行耗时操作,还不如直接使用IntentService来处理耗时操作。



猜你喜欢

转载自blog.csdn.net/u010675729/article/details/48310395
今日推荐