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