Messenger 实现Activity与Service通讯、进程通讯
来源:互联网 发布:数据恢复软件怎么使用 编辑:程序博客网 时间:2024/05/16 17:04
Messenger 实现Activity与Service通讯、进程通讯
信使 主要用于进程通讯详见SDK
android.os.Messenger
一、Activity通过Messenger发送信息给Service
1、创建项目Messenger 包名:com.Messenger.main
2、创建消息结构体MSG.java
package com.Messenger.main;
public class MSG {
static final int MSG_ONE = 1;
static final int MSG_TWO = 2;
static final int MSG_THREE = 3;
static final int MSG_FOUR = 4;
}
3、创建MessengerActivity.java
通过ServiceConnection服务通讯控制类接口来获得Service的连接并创建Messenger对象
重点:绑定服务器
bindService(new Intent(this,MessengerService.class),
this.mConnection, Context.BIND_AUTO_CREATE);
代码:import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.os.Message;
import android.os.Messenger;
import android.os.RemoteException;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MessengerActivity extends Activity {
private Messenger mServiceSend;
private boolean mBound;
private Button mButton;
/**
*服务通讯类接口
*/
private ServiceConnection mConnection = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
mServiceSend = null;
mBound = false;
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// TODO Auto-generated method stub
/*
*Activity通过Service成功连接后返回的IBinder对象构建
*之后通过该IBunder与Service实现通讯
*/
mServiceSend = new Messenger(service);
mBound = true;
}
};
public void doService(){
/*
*创建并发送消息给Service
*/
try {
Message msg = Message.obtain(null, MSG.MSG_ONE,0,0);
mServiceSend.send(msg);
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mButton = (Button)findViewById(R.id.button1);
mButton.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
doService();
}
});
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
//取消绑定
if(mBound){
unbindService(mConnection);
mBound = false;
}
}
@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
//绑定到服务器
bindService(new Intent(this,MessengerService.class),
this.mConnection, Context.BIND_AUTO_CREATE);
}
}
4、让Messenger继承Service
package com.Messenger.main;
import android.app.Service;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.os.Messenger;
import android.os.RemoteException;
import android.util.Log;
public class MessengerService extends Service {
private final String log = "MessengerService";
DataStruct mDataInfo = new DataStruct();
/*
创建发送/接收消息的IncomingHandler
*/
final Messenger mMessenger = new Messenger(new IncomingHandler());
/**
* 来自客户端消息的handler
*/
class IncomingHandler extends Handler{
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
switch (msg.what) {
case MSG.MSG_ONE:
Toast.makeText(getApplicationContext(), "Hello Activity.", Toast.LENGTH_LONG).show();
break;
case MSG.MSG_TWO:
break;
case MSG.MSG_THREE:
break;
case MSG.MSG_FOUR:
break;
default:
break;
}
}
}
/*
当绑定服务时,返回一个接口给messenger,为了发送消息给服务器
*/
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
Log.i(log, "binding.");
return mMessenger.getBinder();
}
@Override
public void onStart(Intent intent, int startId) {
// TODO Auto-generated method stub
Log.i(log, "Service Start.");
super.onStart(intent, startId);
}
主要实现:(main.xml见Messenger 实现Activity与Service通讯、进程通讯(二))Service通过返回Messenger的Binder给绑定它的Activity实现通讯。Service通过Handler监听返回信息,Activity通过ServiceConnection来获得Service的Binder并创建Activity的Messenger对象
下部分通过Messenger实现进程间通讯,Activity发送信息给另一进程的Service。- Messenger 实现Activity与Service通讯、进程通讯
- Android:使用Messenger实现进程间通讯
- messenger进程之间的通讯
- Android基础——Service IPC通讯(Messenger实现)
- Activity与Service之间的通讯机制
- Messenger实现Activity与Service的双向通信
- activity service 通讯
- 远程绑定Service使用Messenger通讯
- Android进程间通讯之messenger
- Android进程间通讯之messenger
- Android进程间通讯之messenger
- 安卓进程通讯之messenger
- Android进程间通讯之messenger
- EventBus实现广播与Activity通讯
- Service和activity如何通讯
- service和activity之间通讯
- Service练习——通过Messenger(信使)来实现IPC通讯(Messenger底层使用AIDL实现)
- 笔记36 | android通讯之实现一个Messenger通讯例子
- ProgressBar水平进度条的颜色设置
- Ubuntu拼音输入法ibus-pingyin
- Error: unable to open database解决
- Restlet入门示例
- Android 点击链接启动APP
- Messenger 实现Activity与Service通讯、进程通讯
- Webdriver学习笔记(四)页面元素的操作
- C# 使用zxing生成包含中文的二维码
- GLSL opengl着色器参数传递Shader
- [HGE]-源码分析-5 core里的graphics(b)
- 3.10 基于OHCI的USB主机 —— OHCI(自定义数据结构)
- linux虚拟机安装部署
- 输入年、月,输出本月有多少天
- Java动态表格类(DyTable)