Android 在其他线程中更新UI线程的解决方法
2016-05-15 03:07
337 查看
1 用Activity对象的runOnUiThread方法更新
2子线程调用Handler的sendMessage(message)发送消息
3 View.post(Runnable )
4 AsyncTask
总结
1.如果只是单纯的想要更新UI而不涉及到多线程的话,使用View.post()就可以了;
2.需要另开线程处理数据以免阻塞UI线程,像是IO操作或者是循环,可以使用Activity.runOnUiThread();
3.如果需要传递状态值等信息,像是蓝牙编程中的socket连接,就需要利用状态值来提示连接状态以及做相应的处理,就需要使用Handler + Thread的方式;
4.如果是后台任务,像是下载任务等,就需要使用AsyncTask。
new Thread() { public void run() { //这儿是耗时操作,完成之后更新UI; runOnUiThread(new Runnable(){ @Override public void run() { //更新UI imageView.setImageBitmap(bitmap); } }); } }.start();
2子线程调用Handler的sendMessage(message)发送消息
//主线程中定义Handler Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case 0: //完成主界面更新,拿到数据 String data = (String)msg.obj; updateWeather(); textView.setText(data); break; default: break; } } }; //子线程发消息,通知Handler完成UI更新 private void updateWeather() { new Thread(new Runnable(){ @Override public void run() { //耗时操作,完成之后发送消息给Handler,完成UI更新; mHandler.sendEmptyMessage(0); //需要数据传递,用下面方法; Message msg =new Message(); msg.obj = "数据";//可以是基本类型,可以是对象,可以是List、map等; mHandler.sendMessage(msg); } }).start(); }
3 View.post(Runnable )
imageView.post(new Runnable(){ @Override public void run() { //更新ui imageView.setImageBitmap(bitmap); } });
4 AsyncTask
总结
1.如果只是单纯的想要更新UI而不涉及到多线程的话,使用View.post()就可以了;
2.需要另开线程处理数据以免阻塞UI线程,像是IO操作或者是循环,可以使用Activity.runOnUiThread();
3.如果需要传递状态值等信息,像是蓝牙编程中的socket连接,就需要利用状态值来提示连接状态以及做相应的处理,就需要使用Handler + Thread的方式;
4.如果是后台任务,像是下载任务等,就需要使用AsyncTask。
相关文章推荐
- UIDeviceOrientation 和 UIInterfaceOrientation 设备旋转的用法
- iOS开发遇到的那些坑之 NSURLRequest开发之URL编码
- Java GUI编程
- 查libevent不能编译出动态库问题
- iOS图形绘制UIBezierPath篇
- CDH5.7Hue使用sqoop导出mysql数据报错
- 第十六章图形用户界面编程(GUI)
- Uva1157——Unique Snowflakes
- BlockingQueue
- EasyUI动态创建、删除模态Dialog
- Light OJ 1085 - All Possible Increasing Subsequences
- 347. Top K Frequent Elements
- Arduino 和 HC-SR04 超声波传感器 测距
- TableView的优化
- iOS应用程序的启动原理-UI进阶
- iOS基础开发UI界面-xib与代码自定义控件的区别
- 一个安卓终端客户端:JuiceSSH
- s5pv210 datasheet_system_BOOTING SEQUENCE
- Android并发编程之Handler,MessageQueue,Looper详解
- vueJs源码解读0-2