Сообщение, отправленное через 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);
}
}