Android BoundService 详解
1.一般实现步骤讲解
在客户端(Activity中)要完成:
1.客户端通过BindService()方法来绑定一个服务对象(业务对象)
如绑定成功会回调ServiceConnection接口方法onServiceConnected()
2.OnServiceConnection()方法的其中一个参数是在Service中OnBind()返回的Binder的实例。
3.通过在OnServiceConnection()方法中接受Binder的实例来调用Binder中返回Service实例的方法,获得Service的实现。
4.通过Service的实例就可以调用Service的的共有方法。
在服务端一般要实现:
1.服务端通过创建一个*.aidl文件来定义一个可以被客户端调用的业务接口
一个AIDL文件的规范:
1>不能有修饰符,类似接口的写法
2>支持数据类型,String\CharSequence\List(存放字符串)\Map\自定义类型
自定义类型:
(要实现Parcelable接口,定义一个AIDL文件声明该类型,在其他AIDL中使用该类型需要import包)
2.服务端需要提供一个业务接口的实现类,通常继承 Stub类
3.通过Service的onBind()方法返回被绑定的业务对象
2.例子讲解
先来张图片
接下来我们按照源码一步步分析
1>先上布局文件,activity_main.xml,三个Button,三个点击事件,很简单,不做讲解
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.allan.android_async_http.MainActivity">
<Button
android:onClick="boundService"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="boundService"/>
<Button
android:onClick="unboundService"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="unboundService"/>
<Button
android:onClick="useIPC"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="useIPC"/>
</LinearLayout>
2>接下来是客户端MainActivity.java的代码
public class MainActivity extends AppCompatActivity {
private ICat cat;
private