1.创建一个Service的子类
2.在AndroidManifest.xml中配置该Service
tips:创建Service子类之后会自动生成public IBinder onBind(Intent arg0)
方法,这是一个必须实现的方法,返回值是一个IBinder对象。为了得到IBinder对象,就需要在这个Service子类中定义一个内部类public class MyBinder extends Binder
AndroidManifest.xml
<service android:name=".BindService">
<intent-filter >
<action android:name="com.chenlijian.bindservice.Bind_SERVICE"/>
</intent-filter>
</service>
BindService.java
public class BindService extends Service {
private int count;
private boolean quit = false;
//自动生成的方法,当其它应用组件(activity)绑定至当前service对象时,就会调用此方法,来返回一个IBinder对象。
@Override
public IBinder onBind(Intent arg0) {
//为了返回一个IBinder对象,就得先实例化一个IBinder对象
IBinder binder = new MyBinder();
return binder;
}
//IBinder是一个接口,所以通常需要继承IBinder的实现类Binder来实现了一个IBinder对象,这个类声明为内部类
public class MyBinder extends Binder{
public int getCount(){
return count;
}
}
@Override
public void onCreate() {
super.onCreate();
//创建这个service的作用是:启动一条线程每隔1s动态地递增count的值
new Thread(){
public void run(){
while(!quit){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
count++;
}
}
}.start();
}
@Override
public void onDestroy() {
super.onDestroy();
//service被关闭前回调该方法,将quit改为true,停止递增count
this.quit = true;
}
@Override
public boolean onUnbind(Intent intent) {
return super.onUnbind(intent);
}
}
MainActivity.java
public class MainActivity extends Activity {
Button bind, unbind, getServiceStatus;
MyBinder binder;
//定义一个ServiceConnection对象(这个定义一定要放在下面的函数上面)
private ServiceConnection conn = new ServiceConnection() {
@Override
//当activity和service成功连接时回调此方法,
public void onServiceConnected(ComponentName name, IBinder service) {
binder = (MyBinder) service;
}
@Override
public void onServiceDisconnected(ComponentName name) {}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bind = (Button) findViewById(R.id.button1);
unbind = (Button) findViewById(R.id.button2);
getServiceStatus = (Button) findViewById(R.id.button3);
//创建启动Service的Intent,并设置Action属性
final Intent intent = new Intent();
intent.setAction("com.chenlijian.bindservice.Bind_SERVICE");
bind.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//通过intent参数,绑定制定Service,并指定(如果Service没有创建而自动创建)
//第二个参数是一个ServiceConnection对象(下面会去创建),当绑定连接时,会去调用ServiceConnection的onServiceConnected方法
bindService(intent, conn, Service.BIND_AUTO_CREATE);
}
});
unbind.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//当断开绑定时,会去调用ServiceConnection的onServiceDisconnected方法
unbindService(conn);
}
});
getServiceStatus.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "Service的count值为:"+ binder.getCount(), Toast.LENGTH_LONG).show();
}
});
}
}
网友评论