У меня был сервис 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();
}
}