Android开发之bindService()通信

Service启动方式有两种,startService(intent)和bindService(intent,conn,Context.BIND_AUTO_CREATE)

startService(intent),【onCreate()-  >onStartCommand()->startService()->onDestroy()】

该方法启动service,会执行一个onStartCommand()的方法,所以一些操作就可以放在onStartCommand()中进行处理。

bindService(intent,conn,Context.BIND_AUTO_CREATE),【onCreate()->onBind()->onUnbind()->onDestroy()】

绑定启动service,

使用该方法启动service分为几部

1.在Service中,重写onBind()方法,返回一个iBinder对象。

1     @Override
2     public IBinder onBind(Intent arg0) {
3         // TODO Auto-generated method stub
4         Log.d("learnservice", "绑定服务...");
5         return new MyBinder();
6     }

2.新建Service类BinderService,在BindService类里新建内部类MyBinder,继承Binder(Binder实现IBinder接口)。该类中实现一些与service通信的方法,比如setData()方法。

1     public class MyBinder extends Binder{
2         public void setData(String data){
3             MyService.this.data=data;
4         }
5     }

3.在Activity里,实例化ServiceConnection接口的实现类,重写onServiceConnected()和onServiceDisconnected()方法。

 1 ServiceConnection conn=new ServiceConnection() {
 2         
 3         @Override
 4         public void onServiceDisconnected(ComponentName name) {
 5             // TODO Auto-generated method stub
 6             
 7         }
 8         
 9         @Override
10         public void onServiceConnected(ComponentName name, IBinder service) {
11             // TODO Auto-generated method stub
12             binder=(MyBinder) service;   //该binder,需要在activity中声明。
13             Log.d("learnservice", "绑定服务conn...");
14         }
15     };

4.使用button的onClick()或者activity的onCreat()等触发bindService()方法

1     @Override
2     public void onClick(View v) {
3         intent = new Intent(MainActivity.this,MyService.class);
4         bindService(intent, conn, Context.BIND_AUTO_CREATE);
5 }

5.在activity中声明service中的binder

1 private MyService.MyBinder binder;

6.同时把该binder放在serviceConnection的onServiceConnection()方法中

1 binder=(MyBinder) service;

这样,就完成了Activity和Service通过bindService()方法绑定并通信。

你可能感兴趣的:(Android开发)