安卓 <wbr>Messager类的使用
(可以看到LogCat中已经打印出了从MainActivity发出的信息)

进行IPC(进程间通信)通信,一般写一个AIDL(安卓接口定义语言)接口,再写一个Service子类,然后实现AIDL接口 当做IBinder返回给Activity界面层。

单线程中与Service进行通信 Messenger类来处理,消息传递给Service进行通信。

Service的代码:

public class MyService extends Service {

private Messenger messenger null;
private Handler handler new Handler(){
public void handleMessage(android.os.Message msg) {
Log.d("MyService_Hanler", "Msg:" + msg.what ";" + msg.obj);
}
};
public MyService() {
}
@Override
public void onCreate() {
super.onCreate();
messenger new Messenger(handler);//获取Service中的Messager
}
@Override
public IBinder onBind(Intent arg0) {
return messenger.getBinder();//取得Binder
}

}
Activity代码:

public class MainActivity extends ActionBarActivity {

private Messenger messenger;
private ServiceConnection conn new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName cn) {
Log.d("MainActivity", "ServiceDisconnected");
}
@Override
public void onServiceConnected(ComponentName cn, IBinder ibiner) {
messenger new Messenger(ibiner);//��取得Messenger
Log.d("MainActivity", "Connect Success!!");
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bindService(new Intent(this, MyService.class), conn, Context.BIND_AUTO_CREATE);
}

public void sendMsg(View view) {
if (messenger == null) {
return;
}
Message msg1 = Message.obtain();
msg1.what 1;
msg1.obj "I Send A Message I am MainActivity";
try {
messenger.send(msg1);
} catch (RemoteException e) {
e.printStackTrace();
}
}
}