0

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);

    }

}
4

0 に答える 0