Android中的service通信可以通过context.bildService()方法,获取service实例来对其进行访问,具体做法如下;
首先在Activity内部实现ServiceConnection
private ServiceConnection conn=new ServiceConnection(){ @Override public void onServiceConnected(ComponentName name, IBinder service) { mservice = ((MyService.MyBinder)service).getService(); //得到了服务类对象就可以使用服务对象提供的方法了。但不可以在onCreate()方法里使用此对象,因为还没有初始化。 mservice.dealData(); Log.e("SERVICE", "connection success"); Toast.makeText(ServiceDeamoActivity.this, "connection success", Toast.LENGTH_LONG).show(); } @Override public void onServiceDisconnected(ComponentName name) { mservice=null; Log.e("SERVICE", "discon"); Toast.makeText(ServiceDeamoActivity.this, "connection failure", Toast.LENGTH_LONG).show(); } };
onCreate()
bindService(new Intent(TaskService.ACTION_SERVICE),mConnection, Context.BIND_AUTO_CREATE);
MyService类;
public class MyService extends Service { private Binder mbinder = new MyBinder(); @Override public IBinder onBind(Intent intent) { Toast.makeText(MyService.this, "onBind......", Toast.LENGTH_LONG).show(); return mbinder; } class MyBinder extends Binder{ public MyService getService(){ return MyService.this; } } void dealData(){ Log.e("msg", "service deal"); } }
2,使用实现接口的service
public class MyService extends Service { private IBinder buider=new MyBinder(); @Override public IBinder onBind(Intent intent) { return buider; } public String query(){ return "hello connection"; } private class MyBinder extends Binder implements IStudent{ @Override public String queryStudent() { return query(); } } }
接口IStudent类
public interface IStudent { String queryStudent(); }
3,通过Messenger发送消息实现
public class ServiceMessage extends Service{ public final static int MSG_HELLO=1; // Handler实现消息的处理 class MyHandler extends Handler{ public void handleMessage(Message msg) { switch(msg.what) { case MSG_HELLO: Toast.makeText(getApplicationContext(), "get the messag", 1000).show(); break; default: Toast.makeText(getApplicationContext(), "default messag", 1000).show(); break; } } } //创建Messenger类,与Handler绑定 private final Messenger myMessager = new Messenger (new MyHandler()); //绑定 public IBinder onBind(Intent arg0) { Toast.makeText(getApplicationContext(), "onBind", Toast.LENGTH_SHORT).show(); return myMessager.getBinder(); } }
ServiceConnection建立连接
private ServiceConnection connection=new ServiceConnection(){ public void onServiceConnected(ComponentName name, IBinder service) { Toast.makeText(mContext, "onServiceConnected ", 1000).show(); messenger=new Messenger(service); } public void onServiceDisconnected(ComponentName name) { messenger=null; } };
发送消息,这是一种通过发送不同的消息来对事件进行相应的处理。
Message msg=Message.obtain(null, ServiceMessage.MSG_HELLO, 0, 0); try { messenger.send(msg); } catch (RemoteException e) { e.printStackTrace(); }
4,利用service生命周期,通过调用startService(intent),在onStartCommand()内接收intent不同参数执行不同命令
在此方法内可以通过获取不同的action来执行不同的方法,
@Override public int onStartCommand(Intent intent, int flags, int startId) { if(intent!=null){ if("action1".equals(intent.getAction())){} else if("action2".equals(intent.getAction())){} else{} } return super.onStartCommand(intent, flags, startId); }
方法四;使用内部广播机制。