OS バージョン: アンドロイド 5.1
android.os.Handler を使用してさまざまなオブジェクト間でメッセージを渡していますが、数千回 (時には数百回) 動作し、その後メッセージが失われます。正常に送信され、sendMessage() は true を返しますが、handleMessage() は呼び出されません。アプリは引き続き動作し、メッセージを見逃した後もメッセージが流れ続けます。
例外やクラッシュはありません。
- 私は何か間違ったことをしていますか?どんな提案も役に立ちます
- Android 5.1 の既知のバグですか? (検索してみましたが見つかりませんでした)
Android Handler を使用して別のクラス「xyz」にメッセージを送信する 5 つのシングルトン コンポーネントがあるアプリケーションがあります。xyz は android.os.Handler を拡張し、handleMessage() 関数をオーバーライドします。xyz は、5 つのシングルトン コンポーネントすべてをインスタンス化し、xyz コンストラクターで「this」(独自の参照) を渡します。次に、コンポーネントはその参照を使用して 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_コンポーネント:
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);
}
}
USBマネージャー:
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. */
}
}
UV コンポーネント:
class UVComponent extends Handler {
UVComponent(Looper looper) {
super(looper);
}
}