Android在非UI线程中更新UI的方法
16lz
2021-01-26
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。
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() {@Overridepublic void run() {updateView();}});
3、使用Activity.runOnUiThread(runnable)的方法来更新UI
更多相关文章
- Android中从网络获取数据的方法
- Android(安卓)Cocos2d-x游戏集成友盟社会化组件分享功能
- android 日记log保存到本地简单方法
- Android之通过ContentProvider实现两个app(进程间)间通信以及函
- Android(安卓)onAttach 的使用
- android中如何捕获home键
- android 模拟器,创建sdcard 但是却是只读的,没办法修改属性
- Android(安卓)Service教程
- BlockCanary原理解析(Android端UI卡顿监测工具)