messenger,client和server通信Demo

</pre><p>Server</p><p></p><p><pre name="code" class="java">public class MessengerService extends Service {
	
	private Handler handle=new Handler(){
		public void handleMessage(Message msg) {
			//獲得傳過來的messenger,用來向客戶端發送數據
			Messenger replayTo=msg.replyTo;
			//計算結果
			int res=msg.arg1+msg.arg2;
			//從消息池中獲得一個新的message;
			Message newMsg=Message.obtain();
			//將計算的結果放到arg1中;
			newMsg.arg1=res;
			
			//newMsg.replyTo=replayTo;
			
			try {
				//發送回去給客戶端
				replayTo.send(newMsg);
			} catch (RemoteException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		};
	};
	
	@Override
	public IBinder onBind(Intent intent) {
		//綁定成功的時候打印一句
		Toast.makeText(getApplicationContext(), "計算成功 ", 0).show();
		//實質返回Messenger
		//客戶端發送的消息到上面處理
		return new Messenger(handle).getBinder();
	}

	

}


Client


public class MainActivity extends Activity implements OnClickListener {
private Button  bind;
private EditText num1,num2;
private TextView result;
private Messenger replyto;

/**
* 處理服務端返回的信息
*/
private Handler handle=new Handler(){
public void handleMessage(Message msg) {
result.setText(msg.arg1+"");

};
};
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

bind=(Button) findViewById(R.id.bind);
num1=(EditText) findViewById(R.id.num1);
num2=(EditText) findViewById(R.id.num2);
result=(TextView) findViewById(R.id.result);
//新建一個messenger,用於服務端返回數據的載體
replyto=new Messenger(handle);
bind.setOnClickListener(this);
}




@Override
public void onClick(View v) {

Intent intent=new Intent("ln");


bindService(intent, conn, Context.BIND_AUTO_CREATE);

}

private ServiceConnection conn=new ServiceConnection() {

@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub

}

@Override
public void onServiceConnected(ComponentName name, IBinder service) {
//通過new messenger(Ibind )取得綁定返回的messenger。
Messenger messenger=new Messenger(service);
Message msg=Message.obtain();
msg.arg1=Integer.parseInt(num1.getText().toString());
msg.arg2=Integer.parseInt(num2.getText().toString());
//設置用於發送回來的messenger
msg.replyTo=replyto;
try {
messenger.send(msg);
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
};



protected void onDestroy() {
unbindService(conn);

};


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章