Как проверить длину очереди Android Messenger - PullRequest
0 голосов
/ 19 декабря 2018

У меня был сервис Android, он связывался с клиентом с Messenger (поскольку сервис должен выполнять команду последовательно, поэтому выбрал Messenger), Messenger будет ставить задачи в очередь, если есть несколько запросов одновременно.Клиент хочет проверить длину очереди сервера, чтобы решить, стоит ли выстраиваться в линию, так как проверить длину очереди мессенджера?

Код Exp:

public class MessengerService extends Service {
private static final String TAG = "Serial Service";
private static final int MSG_EXECMD = 0x1;

private Messenger mMessenger;
private HandlerThread mHandlerThread;
private Handler mHandler;
private Message mmessageToClient;

@Override
public IBinder onBind(Intent intent) {
    Log.d(TAG, "onBind");
    return mMessenger.getBinder();
}
@Override
public boolean onUnbind(Intent intent) {
    Log.d(TAG, "onUnbind pid=" + android.os.Process.myPid());
    return super.onUnbind(intent);
}
@Override
public void onCreate() {
    mHandlerThread = new HandlerThread("serial-work-thread");
    mHandlerThread.start();
    mHandler = new Handler(mHandlerThread.getLooper()) {
        @Override
        public void handleMessage(Message msgfromClient) {
            Message msgToClient = Message.obtain(msgfromClient);
            mmessageToClient = Message.obtain(msgfromClient);
            switch (msgfromClient.what) {
                case MSG_EXECMD:
                    msgToClient.what = MSG_EXECMD;
                    try {
                        //takes time here about 3s
                        Thread.sleep(3000);
                        msgToClient.arg1 = 0;
                        msgToClient.arg2 = msgfromClient.arg2;
                        msgfromClient.replyTo.send(msgToClient);
                    } catch (Exception e) {
                        Log.e(TAG, "Error:" + e.getMessage());
                    }
                    break;
            }
        }
    };
    mMessenger = new Messenger(mHandler);
    super.onCreate();
}
}
...