从后台线程更新UI

时间:2015-12-07 09:37:50

标签: android handler

我只测试了一些基本的处理程序,下面是代码。现在我的问题是,当我尝试从后台线程更新UI时更新它。这是为什么?在我看来,我期待发生例外。

private Handler mHandler = null;
private Handler mUIHandler = null;

public static final int BACKGROUND_OPERATION = 10;
public static final int MAIN_THREAD_OPERATION = 20;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    HandlerThread backgroundThread = new HandlerThread("BACKGROUND_THREAD");
    backgroundThread.start();
    mHandler = new Handler(backgroundThread.getLooper(), this);

    mUIHandler = new Handler(Looper.getMainLooper(), this);

    Thread t = new Thread(new Runnable() {
        @Override
        public void run() {
                mHandler.sendEmptyMessage(BACKGROUND_OPERATION);
//            mUIHandler.sendEmptyMessage(MAIN_THREAD_OPERATION);
        }
    });
    t.start();
}

@Override
protected void onDestroy() {
    super.onDestroy();
    mHandler.getLooper().quit();
}

@Override
public boolean handleMessage(Message message) {
    switch (message.what) {
        case MAIN_THREAD_OPERATION:
            ((TextView) findViewById(R.id.textview)).setText("Updating from UI Handler");
            findViewById(R.id.textview).invalidate();
            break;
        case BACKGROUND_OPERATION:
            ((TextView) findViewById(R.id.textview)).setText("Updating from background Handler");
            findViewById(R.id.textview).invalidate();
            break;
        default:
            break;
    }

//        message.recycle();
    return true;
}

0 个答案:

没有答案
相关问题