首页 > 系统 > Android > 正文

Android开发使用Messenger及Handler进行通信的方法示例

2019-10-22 18:20:27
字体:
来源:转载
供稿:网友

本文实例讲述了Android开发使用Messenger及Handler进行通信的方法。分享给大家供大家参考,具体如下:

1. 客户端service

public class MessageService extends Service { private static final int MSG_SET_VALUE = 0x110; private Handler mHandler = new Handler() {  public void handleMessage(Message msgFromClient) {   // 返回给客户的信息   Message msgToClient = Message.obtain(msgFromClient);   switch (msgFromClient.what) {   // msg 客户端传来的消息   case MSG_SET_VALUE:    try {     msgToClient.what = MSG_SET_VALUE;     SystemClock.sleep(2000);     msgToClient.arg2 = msgFromClient.arg1 + msgFromClient.arg2;     //msgFromClient.replyTo.send(msgToClient);     //得到客户端的信使对象,并向它发送消息     cMessenger = msgFromClient.replyTo;     cMessenger.send(msgToClient);    } catch (RemoteException e) {     e.printStackTrace();    }    break;   default:    break;   }  } }; private Messenger mMessager = new Messenger(mHandler); private Messenger cMessenger; @Override public IBinder onBind(Intent intent) {  return mMessager.getBinder(); } @Override public void onDestroy() {  cMessenger = null;  super.onDestroy(); }}

2. 服务器端service

public class MessageService extends Service { private static final int MSG_SET_VALUE = 0x110; private Handler mHandler = new Handler() {  public void handleMessage(Message msgFromClient) {   // 返回给客户的信息   Message msgToClient = Message.obtain(msgFromClient);   switch (msgFromClient.what) {   // msg 客户端传来的消息   case MSG_SET_VALUE:    try {     msgToClient.what = MSG_SET_VALUE;     SystemClock.sleep(2000);     msgToClient.arg2 = msgFromClient.arg1 + msgFromClient.arg2;     //msgFromClient.replyTo.send(msgToClient);     //得到客户端的信使对象,并向它发送消息     cMessenger = msgFromClient.replyTo;     cMessenger.send(msgToClient);    } catch (RemoteException e) {     e.printStackTrace();    }    break;   default:    break;   }  } }; private Messenger mMessager = new Messenger(mHandler); private Messenger cMessenger; @Override public IBinder onBind(Intent intent) {  return mMessager.getBinder(); } @Override public void onDestroy() {  cMessenger = null;  super.onDestroy(); }}

3. 客户端使用

public class MainActivity extends Activity { private static final int MSG_SET_VALUE = 0x110; private TextView mTVStatus; // 连接状态 private LinearLayout mLLContainer;// 用来添加接收到服务器返回的信息 private Messenger mService; // 客户端信使 private boolean isConnecting; // 是否连接 private Handler mHandler = new Handler() {  public void handleMessage(Message msgFromServer) {   switch (msgFromServer.what) {   case MSG_SET_VALUE:    TextView tv = (TextView) findViewById(msgFromServer.arg1);    tv.setText(tv.getText() + "==>" + msgFromServer.arg2);    break;   }   super.handleMessage(msgFromServer);  }; }; private Messenger mMessenger = new Messenger(mHandler); @Override protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);  mTVStatus = (TextView) findViewById(R.id.tv_status);  mLLContainer = (LinearLayout) findViewById(R.id.ll_container); } int i = 0; public void send(View view){  try {   int a = i++;   int b = (int) (Math.random() * 100);   //创建一个tv,添加到LinearLayout中   TextView tv = new TextView(MainActivity.this);   tv.setText(a + " + " + b + " = caculating ...");   tv.setId(a);   mLLContainer.addView(tv);   Message msgFromClient = Message.obtain(null, MSG_SET_VALUE, a, b);   msgFromClient.replyTo = mMessenger;   if (isConnecting) {    //往服务端发送消息    mService.send(msgFromClient);   }  } catch (RemoteException e) {   e.printStackTrace();  } } public void bind(View view) {  Intent service = new Intent();  service.setAction("android.intent.action.MESSAGE_SERVER");  bindService(service, conn, Context.BIND_AUTO_CREATE); } private ServiceConnection conn = new ServiceConnection() {  @Override  public void onServiceDisconnected(ComponentName name) {   mService = null;   isConnecting = false;   mTVStatus.setText("已断开连接!");  }  @Override  public void onServiceConnected(ComponentName name, IBinder service) {   mService = new Messenger(service);   isConnecting = true;   mTVStatus.setText("连接成功!");  } }; public void unbind(View view) {  unbindService(conn);  conn = null; } @Override protected void onDestroy() {  unbindService(conn);  conn = null;  super.onDestroy(); }}

希望本文所述对大家Android程序设计有所帮助。


注:相关教程知识阅读请移步到Android开发频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表