Указанный маркер барьера синхронизации очереди сообщений не был опубликован
У меня есть приложение, которое в качестве привязанного сервиса. Я отправляю сообщения в службу, но иногда получаю следующую ошибку:
E / AndroidRuntime (28216): java.lang.IllegalStateException: указанный токен барьера синхронизации очереди сообщений не был опубликован или уже удален.
Иногда я получаю эту ошибку вместо:
android.util.AndroidRuntimeException: {что = 888 при = 0} Это сообщение уже используется.
Иногда пользовательский интерфейс просто зависает. От службы я общаюсь до активности и наоборот через хендлеров.
public void init(IBinder service){
playerService = new Messenger(service);
setBound(true);
try {
Message msg = Message.obtain(null, PlayerService.MSG_REGISTER_CLIENT);
msg.replyTo = messenger;
playerService.send(msg);
while(!messageQueue.isEmpty()){
playerService.send(messageQueue.remove());
}
} catch (RemoteException e) {
// In this case the service has crashed before we could even do anything with it
Log.d(Player.TAG, "problem binding player messenger " + e.getMessage());
}
}
Вот метод, который последовательно приводит к зависаниям, второй раз он вызывается.
public void play(String url) {
Message msg = Message.obtain(null, PlayerService.PLAY, 0, 0);
msg.setData(getURLBundle(url));
sendMessage(msg);
}
private void sendMessage(Message message){
if(!isBound){
Log.d(Player.TAG, "isnt bound, queueing message");
messageQueue.add(message);
}else {
try {
playerService.send(message);
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
Я новичок в Threading, Messenger и Handlers, поэтому любая помощь приветствуется, спасибо :)