我已经创建了处理程序,

    public final Handler handlerPositionTest = new Handler() {
        public void handleMessage(Message msg) {
         Log.i(TAG, "handleMessage------------reached");
          //MyCode here
        }
    };


我也有一个通用的事件监听器来接收事件详细信息,

private GenericEventListener PositionStatusChangedListener = new GenericEventListener() {
            public void eventTriggered(Object sender, Event event) {
            Log.i(TAG, "Event triggered here------------");
            Log.i(TAG, "Event is not null------------:"+event);
            Log.i(TAG, "hanlder------------:"+handlerPositionTest);
            Message msg = handlerPositionTest.obtainMessage();
            msg.what = 2;
            msg.obj = e;
            handlerPositionTest.sendMessage(msg);
}
};


如果我连续触发事件,则sendMessage()方法在处理程序中几秒钟仍未到达handleMessage()方法。它也丢失了该事件消息。如果几秒钟后尝试仍能正常工作,则表示它已到达handleMessage()。

我不清楚重现此问题的方案,它是随机发生的。

如果你们对这个问题有任何想法,请留下评论。

提前致谢。

最佳答案

如果您正在执行未及时返回的同步调用,则可能需要在后台线程上启动处理程序。

    HandlerThread handlerThread = new HandlerThread(
            "Background thread",
            android.os.Process.THREAD_PRIORITY_BACKGROUND
    );
    handlerThread.start();
    mHandler = new android.os.Handler(handlerThread.getLooper(), this);


只要确保将用户界面的所有更新都放在runOnUiThread(Runnable)

有关线程和进程的更多信息,建议您查看Android developer guide to processes and threads

10-07 22:41