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()方法绑定并通信。