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);
}
方法四;使用内部广播机制。