Android Service AIDL

来源:互联网 发布:中山大学软件工程 知乎 编辑:程序博客网 时间:2024/06/06 12:52

android中服务类似于windows操作系统中的服务,在后台运行。

一个不提供用户界面、长期在后台运行的一个组件。

其他组件启动了service之后 如果切换到其他程序此service继续运行。

可以通过一下两种方式运行:

一、使用startService开启,及时开启他的组件已经销毁、service仍可以在后台继续无期限的运行,但不会给调用者返回结果。

二、使用bindService绑定,可以调用service服务的操作,提供IPC操作,类似服务器、客户机模式,只能在绑定的组件运行时才能运行,当绑定的销毁了。

默认情况下service是运行在启动他的进程的线程里,是运行在主线程里的,继承IntentService是创建了一个新的工作线程。

声明周期回调方法:

一、onStartCommand() :使用startService()方法调用会回调此方法。

二、onBind() :使用bindService()方法调用会回调此方法。

三、onCreate() :第一次启动时被创建的时调用。如果已经运行将不在回调此方法。

四、onUnbind():通过bindService()客户端断开连接后回调此方法。

五、onDestroy() :服务停止后 service 销毁时回调。

如果是startService() 可以通过stopService() 或者stopSelf()来停止此服务,若不停止将尽可能一直在后台运行。

通过bindService()启动的服务,可以使用unbindService()来停止服务。


AIDL Android Interface Defined Language android接口定义语言,可以通过AIDL在不同应用之间调用服务。

可以创建一个.aidl后缀的文件,保存至项目src目录下,会自动生成与文件明同名的类接口文件。

在Service onBiild()里返回的IBinder对象继承此接口并返回IBinder对象。

调用bindService() 的onServiceConnected()参数中的IBinder对象就是该接口的实现类,使用IRemoteService.Stub.asInterface(service)可以转化成一个该接口的对象,可以直接调用里面的方法。

不同应用间通过IPC调用传递的对象需要实现Parcelable接口。


0 0
原创粉丝点击