1、使用Thread+Handler实现非UI线程更新UI界面
在UI Thread中创建Handler。用sendMessage(message)或者obtainMessage(result, obj).sendToTarget()在handleMessage方法中更新UI。
推荐使用obtainMessage(result, obj).sendToTarget()。由于这种方法会先去消息池中看看有没有Message,假设有。则取出这个Message,假设没有再去创建。这个能够防止Message对象的反复创建,节省资源。
而sendMessage(message)则每次要先new Message。
推荐使用obtainMessage(result, obj).sendToTarget()。由于这种方法会先去消息池中看看有没有Message,假设有。则取出这个Message,假设没有再去创建。这个能够防止Message对象的反复创建,节省资源。
而sendMessage(message)则每次要先new Message。
private MyHandler mHandler = new MyHandler(); ...... mHandler.sendResult(MyHandler.UPDATE_VIEW, null); ...... private class MyHandler extends Handler{ private static final int UPDATE_VIEW = 0; @Override public void handleMessage(Message msg) { switch (msg.what) { case UPDATE_VIEW: updateView(); break; default: break; } } private void sendResult(int result, Object obj) { Message message = new Message(); message.what = result; message.obj = obj; sendMessage(message); //obtainMessage(result, obj).sendToTarget(); //效率更高 } }
或者用Handler.post(runnable)的方法去更新UI。
2、使用View的post方法来更新UI
mView.post(new Runnable() { @Override public void run() { updateView(); } });