我只测试了一些基本的处理程序,下面是代码。现在我的问题是,当我尝试从后台线程更新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;
}