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

本文实例讲述了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程序设计有所帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值