是mHandler.obtainMessage应该触发handleMessage(消息消息)

时间:2013-12-14 22:40:30

标签: java android multithreading handlers

当天的第二个问题! (对不起,新手)

我正在尝试创建一个单独的线程,在该线程中我需要能够将信息发送回UI线程。为此,我继续创建了一个新的Handler类:

private static class nHandler extends Handler{
    private final WeakReference<MainActivity> mTarget;
    public nHandler(MainActivity context){
        mTarget = new WeakReference<MainActivity>((MainActivity) context);
    }

    @Override
    public void handleMessage(Message msg){ Log.d("Something", "It got here")}
    }

在我的主要活动类中,我有一个私有静态nHandler mHandler;然后我使用mHandler = new nHandler(this)在我的onCreate()中创建了一个处理程序;

当我创建另一个线程时,它运行我创建一个处理程序对象并将其设置为我在构造函数中传递的那个。在另一个课程中,我有一个函数:

private synchronized void setState(int state){
    //lets add some logging
    mState = state;
    //Give the handler something so the Main Activity Updates
    mHandler.obtainMessage(MainActivity.HANDLER_CHANGE_SERVER_STATUS, state, -1);
}

但是在日志中我没有看到我的日志出现。我可能不完全理解处理程序应该如何工作,所以如果您认为这种情况可以帮助我理解它们并使其正常工作?

谢谢!

2 个答案:

答案 0 :(得分:0)

好的伙计.....

好吧我明白了。

随时你做

mHandler.obtainMessage()请确保包含.sendToTarget();

所以最后它看起来像:

mHandler.obtainMessage(MainActivity.HANDLER_CHANGE_SERVER_STATUS, state, -1).sendToTarget();

我要离开这个问题以防万一其他人谷歌为它

答案 1 :(得分:0)

您必须发送获得的消息。

 mHandler.sendMessage( mHandler.obtainMessage(MainActivity.HANDLER_CHANGE_SERVER_STATUS, state, -1));