0
我目前正在使用我的应用使用的插件与外部服务进行通信。如何使用Handler与绑定服务进行通信?
绑定服务最终启动一个活动,然后通知主应用程序该活动已完成。
问题是,本地广播通知服务。我已将Messenger msg.replyTo
存储到一个变量中,因此我可以在处理程序完成后访问它,但服务仍处于绑定状态。
它确实有效,但我想完全确定没有NullPointer可能,所以我不太喜欢这种方法。
有没有更好的方式与Binder进行通信,而不是将Messenger存储在变量中?
这里是更好地了解一些代码:
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
try {
if (intent.getAction().equals("activity_closed") && mReplyMessenger != null) {
mReplyMessenger.send(Message.obtain(null, MSG_RESULT_ACTIVITY_FINISHED));
}
} catch (RemoteException e) {
e.printStackTrace();
}
};
class IncomingHandler extends Handler {
@Override
public void handleMessage(Message msg) {
mReplyMessenger = null;
try {
switch (msg.what) {
case MSG_START_ACTIVITY: {
mReplyMessenger = msg.replyTo;
[...]
BridgeBinder.this.startActivity(i);
break;
}
[...]
default:
super.handleMessage(msg);
}
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
final Messenger mMessenger = new Messenger(new IncomingHandler());
@Override
public IBinder onBind(Intent arg0) {
return mMessenger.getBinder();
}
AsyncTask如何解决这个问题? – Force
请在发布随机评论之前阅读该问题。它是关于绑定服务的,处理程序是主应用程序和外部服务之间的IPC。 – Force