Сообщение, отправленное через Handler.sendMessage(), не получено в handleMessage() 1 из нескольких сотен / тысяч раз

Версия ОС: Android 5.1

Я передаю сообщения между различными объектами, используя android.os.Handler, и это работает несколько тысяч раз (иногда несколько сотен), а затем пропускается сообщение. Он успешно отправлен, sendMessage() возвращает true, но handleMessage() никогда не вызывается. Приложение продолжает работать, а сообщение продолжает течь даже после пропущенного сообщения.

Нет никаких исключений или сбоев.

  • Я делаю что-то неправильно? Любые предложения будут полезны
  • Это известная ошибка в Android 5.1? (Я пытался найти, но не смог найти)

У меня есть приложение, в котором есть 5 одноэлементных компонентов, отправляющих сообщения другому классу "xyz" с помощью Android-обработчика. xyz расширяет android.os.Handler и переопределяет функцию handleMessage(). xyz создает все 5 одноэлементных компонентов и передает им this (свою собственную ссылку) в конструкторе xyz. Затем компоненты используют эту ссылку для вызова sendMessage().

Основная деятельность:

onCreate() {
    mController = Controller.getInstance ();
}

контроллер:

Controller() {
    /* Following is the USB Manager. */
    mUsbHandlerThread = new HandlerThread("USBManagerHandler", Thread.NORM_PRIORITY);
    mUsbManagerHandlerThread.start();
    mUSBManager = USBManager.getInstance(mUsbManagerHandlerThread.getLooper());

    /* Following are the components which send messages to USB Manager. */
    mBmsComponentHandlerThread = new HandlerThread("BMSComponentManagerHandler", Thread.NORM_PRIORITY);
    mBmsComponentHandlerThread.start();
    mBmsComponent = BMSComponent.getInstance(mBmsComponentHandlerThread.getLooper());
mBmsComponent.setUSBManagerHanlder(mUSBManager)
    /* There are 4 other components initialized the same way. */

}

BMS_Component:

public class BMSComponent extends UVComponent {

    public Handler usbHandler;

    private BMSComponent (Looper looper) {
        super(looper);
    }

    public setUSBHandler(USBComponent usbHandler) {
        this.usbHandler = usbHandler;
    }

    public postToUSBManager(Message message) {
        this.usbHandler.sendMessage(message);
    }

}

USBManager:

public class USBManager extends UVComponent {

    public Handler usbHandler;

    private USBManager (Looper looper) {
        super(looper);
    }

    @Override
    public void handleMessage(Message msg) {
        /* process the message here, and call the response handler which there in the msg object. */

}

    }

UVComponent:

class UVComponent extends Handler {

    UVComponent(Looper looper) {
        super(looper);

    }

}

0 ответов

Другие вопросы по тегам