http://blog.csdn.net/zhou_wenchong/article/details/51302574
bindService用于绑定一个服务。这样当bindService(intent,conn,flags)后,就会绑定一个服务。这样做可以获得这个服务对象本身,而用startService(intent)的方法只能启动服务。
bindService方式的一般过程:
1.新建Service类BindService。在BindService类里新建内部类MyBinder,继承自Binder(Binder实现IBinder接口)。MyBinder提供方法返回BindService实例。
public class MyBinder extends Binder{
public BindService getService(){
return BindService.this;
}
}
实例化MyBinder得到mybinder对象;
重写onBind()方法:
@Override
public IBinder onBind(Intent intent) {
return mybinder;
}
2.在Activity里,实例化ServiceConnection接口的实现类,重写onServiceConnected()和onServiceDisconnected()方法
ServiceConnection conn=new ServiceConnection(){
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
};
3.在Activity的onCreate()方法里,新建Intent,并绑定服务
Intent intent=new Intent(MainActivity.this,BindService.class);
bindService(intent, conn,BIND_AUTO_CREATE);
4.在Activity的onDestroy里面,添加
unbindService(conn);
如果不加这一步,就会报Android.app.ServiceConnectionLeaked: ******.MainActivity has leaked ServiceConnection的异常。
bindService()的执行过程如下:
bindService(intent,conn,flag)->Service:onCreate()->Service:onBind()->Activity:onServiceConnected()
code
- 1:调用者
-
- package com.zhf.local;
-
- import android.app.Activity;
- import android.content.ComponentName;
- import android.content.Context;
- import android.content.Intent;
- import android.content.ServiceConnection;
- import android.os.Bundle;
- import android.os.IBinder;
-
-
-
-
-
-
-
- public class LocalServiceActivity extends Activity {
-
- private MyService myService;
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
-
- Intent intent = new Intent(this, MyService.class);
- bindService(intent, connection, Context.BIND_AUTO_CREATE);
- }
-
- private ServiceConnection connection = new ServiceConnection() {
-
- @Override
- public void onServiceDisconnected(ComponentName name) {
- myService = null;
- }
-
- @Override
- public void onServiceConnected(ComponentName name, IBinder service) {
- myService = ((MyService.MyBinder) service).getService();
- System.out.println("Service连接成功");
-
- myService.excute();
- }
- };
-
- protected void onDestroy() {
- super.onDestroy();
- unbindService(connection);
- };
- }
-
- 2:服务者
-
- package com.zhf.local;
-
- import android.app.Service;
- import android.content.Intent;
- import android.os.Binder;
- import android.os.IBinder;
-
- public class MyService extends Service {
- private final IBinder binder = new MyBinder();
-
- @Override
- public IBinder onBind(Intent intent) {
- return binder;
- }
-
- public class MyBinder extends Binder {
- MyService getService() {
- return MyService.this;
- }
- }
-
- public void excute() {
- System.out.println("通过Binder得到Service的引用来调用Service内部的方法");
- }
-
- @Override
- public void onDestroy() {
-
- super.onDestroy();
- }
-
- @Override
- public boolean onUnbind(Intent intent) {
-
- System.out.println("调用者退出了");
- return super.onUnbind(intent);
- }
- }