线程更新UI
来源:互联网 发布:java 模拟get请求 编辑:程序博客网 时间:2024/06/05 18:51
更新UI方式:
更新UI方法一:handler.post
更新UI方法二:view.post
更新UI方法三:runOnUiThread
更新UI方法四:handler.handleMessage
示例:
public class ThreadActivity extends FragmentActivity { /*更新UI方法四:handler.handleMessage*/ private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case 0: Log.e("111", "开始下载"); break; case 1: Log.e("111", "设置图片"); mIv.setImageBitmap((Bitmap) msg.obj); Log.e("111", "handler.handleMessage为:" + Looper.getMainLooper().getThread());//Thread[main,5,main] Log.e("111", "handler.handleMessage 名称为:" + Thread.currentThread().getName());//main break; case 2: Log.e("111", "设置完毕"); break; } } }; private ImageView mIv; private String path = "https://github.com/Ablexq/MyTabs/raw/master/pic/a.jpg"; @RequiresApi(api = Build.VERSION_CODES.KITKAT) @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_thread); mIv = ((ImageView) this.findViewById(R.id.iv)); Log.e("111", "主线程(UI线程)为:" + Looper.getMainLooper().getThread());//Thread[main,5,main] Log.e("111", "主线程(UI线程)名称为:" + Thread.currentThread().getName());//main new Thread(new Runnable() {//子线程 @Override public void run() { //下载前 handler.sendEmptyMessage(0); Bitmap bm = null; try { HttpURLConnection huc = (HttpURLConnection) new URL(path).openConnection(); huc.connect(); if (huc.getResponseCode() == 200) { bm = BitmapFactory.decodeStream(huc.getInputStream()); } //设置图片 Message message = Message.obtain(); message.obj = bm; message.what = 1; handler.sendMessage(message); //设置图片后 handler.sendEmptyMessage(2); } catch (IOException e) { e.printStackTrace(); } Log.e("111", "new Thread线程为:" + Thread.currentThread());//Thread[Thread-5,5,main] Log.e("111", "new Thread线程 名称为:" + Thread.currentThread().getName());//Thread-5 final Bitmap finalBm = bm; /*更新UI方法一:handler.post*/// handler.post(new Runnable() {// @Override// public void run() {// Log.e("111", "handler.post线程为:" + Thread.currentThread());//Thread[main,5,main]// Log.e("111", "handler.post线程 名称为:" + Thread.currentThread().getName());//main// mIv.setImageBitmap(finalBm);// }// }); /*更新UI方法二:view.post*/// mIv.post(new Runnable() {// @Override// public void run() {// Log.e("111", "view.post线程为:" + Thread.currentThread());//Thread[main,5,main]// Log.e("111", "view.post线程 名称为:" + Thread.currentThread().getName());//main// mIv.setImageBitmap(finalBm);// }// }); /*更新UI方法三:runOnUiThread*/// runOnUiThread(new Runnable() {// @Override// public void run() {// Log.e("111", "runOnUiThread线程为:" + Thread.currentThread());//Thread[main,5,main]// Log.e("111", "runOnUiThread线程 名称为:" + Thread.currentThread().getName());//main//// mIv.setImageBitmap(finalBm);// }// }); } }).start(); }}
阅读全文
0 0
- 非UI线程更新UI!?
- TimerTask 更新UI线程
- 线程更新UI
- C# 线程更新 UI
- 线程更新UI
- 线程中更新ui
- 子线程更新UI
- 子线程更新UI
- 安卓子线程更新UI
- 子线程更新ui
- 线程中更新UI
- TimerTask 更新UI线程
- 线程更新UI
- 使用线程更新UI(转载)
- C# 通过线程更新UI
- android线程更新UI界面
- qt 线程更新UI界面
- 子线程实现UI更新
- 光纤跳线与铜线在延迟上的区别
- 【Leetcode】Add Two Numbers
- Glide使用高级技巧(解决Glide生成缓存Key问题)
- 观察者模式
- excel生成excel语句
- 线程更新UI
- anguar学习原网页
- 记一次错误“net::ERR_INCOMPLETE_CHUNKED_ENCODING”
- Android去除屏幕最上方的标签(App名字)
- 安卓开发之webview长按复制粘贴功能
- mysql 多表关联更新
- 用命令行无法运行PostgreSQL命令的问题
- hashMap工作原理
- 数据结构 线性表的顺序结构