如果你觉得写aidl比较麻烦,android还简单封装了一个 Messenger api,可以进行简单的跨进程通信,不过我干android这么多年,从来没有见过有哪个项目用过这玩意儿,因为太麻烦,还不如直接用aidl简单感觉,如果你是初学者,早点弃坑
1。声明并实现一个service
<service android:name=".MsgrIpcService"
android:process=":msgr">
</service>
package com.xbb.ipcdemo;
import android.app.Service;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.os.Messenger;
import android.os.RemoteException;
// ipc with Android Messenger api
public class MsgrIpcService extends Service {
private final class IncomingHandler extends Handler {
@Override
public void handleMessage(Message msg) {
if (msg.what == Contract.Client.WHAT_TEXT) {
Message message = Message.obtain(null, Contract.Client.WHAT_TEXT);
Bundle bundle = new Bundle();
bundle.putString("key_text", "msgr");
message.obj = bundle;
try {
msg.replyTo.send(message);
} catch (RemoteException e) {
e.printStackTrace();
}
} else {
super.handleMessage(msg);
}
}
}
final Messenger mMessenger = new Messenger(new IncomingHandler());
@Override
public IBinder onBind(Intent intent) {
return mMessenger.getBinder();
}
}
3。在Activity中去bind一下
private final Messenger clientMessenger = new Messenger(handler);
private final ServiceConnection msgrConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName className, IBinder service) {
serviceMessenger = new Messenger(service);
Message msg = Message.obtain(null, Contract.Client.WHAT_TEXT);
Bundle bundle = new Bundle();
bundle.putString(“key_text”, "hello");
msg.obj = bundle;
msg.replyTo = clientMessenger;
try {
serviceMessenger.send(msg);
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
public void onServiceDisconnected(ComponentName className) {
serviceMessenger = null;
}
};
@Override
protected void onStart() {
super.onStart();
bindService(new Intent(MainActivity.this, MsgrIpcService.class), msgrConnection,
Context.BIND_AUTO_CREATE);
}
有什么难度吗,没有