使用Messenger类
客户端
public class MainActivity extends AppCompatActivity {
boolean bound=false;
Intent intent;
Messenger messengerSend;
Messenger messengerRecv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
intent = new Intent(this,CustomBindService.class);
bindService(intent,sc,Context.BIND_AUTO_CREATE);
}
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
Log.e("androidLog","what="+msg.what);
}
};
public void btnClick(View view) {
switch (view.getId()){
case R.id.btnStart:
Message msg = new Message();
msg.what=100;
messengerRecv = new Messenger(handler);
msg.replyTo=messengerRecv;
try {
messengerSend.send(msg);
} catch (RemoteException e) {
e.printStackTrace();
}
break;
case R.id.btnStop:
stopService(intent);
break;
}
}
ServiceConnection sc= new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
messengerSend = new Messenger(service);
bound = true;
}
@Override
public void onServiceDisconnected(ComponentName name) {
bound = false;
}
};
}
服务端
public class CustomBindService extends Service {
Messenger messengerRev;
Messenger messengerReply;
public CustomBindService() {
messengerRev = new Messenger(handler);
}
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
Log.e("androidLog","what="+msg.what);
messengerReply = msg.replyTo;
Message message = new Message();
message.what=50;
try {
messengerReply.send(message);
} catch (RemoteException e) {
e.printStackTrace();
}
}
};
@Override
public IBinder onBind(Intent intent) {
return messengerRev.getBinder();
}
}