Android的Binder通过Messenger跨进程通讯

56 阅读1分钟

服务端代码


public class MyService extends Service {
    private static final String TAG = "MyService";

    private Handler mHandler = new Handler(){
        @Override
        public void handleMessage(@NonNull Message msg) {
            Bundle bundle = msg.getData();
            int id = bundle.getInt("id");
            Log.d(TAG, "handleMessage: id = "+id);
        }
    };


    @Override
    public IBinder onBind(Intent intent) {
        return (IBinder) new Messenger(mHandler).getBinder();
    }
}

客户端代码


ServiceConnection connection = new ServiceConnection() {
    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
        Messenger messenger = new Messenger(service);
        Message msg = Message.obtain();
        Bundle bundle = new Bundle();
        bundle.putInt("id",1000);
        msg.setData(bundle);

        try {
            messenger.send(msg);
        } catch (RemoteException e) {
            throw new RuntimeException(e);
        }
    }

    @Override
    public void onServiceDisconnected(ComponentName name) {

    }
}

private void bindService(){
    Intent intent = new Intent (MainActivity.this, MyService.class);
    bindService(intent,connecttion,Context,BIND_AUTO_CREATE);
}