android中子线程更新UI的几种方法
2016-06-30 18:11
597 查看
第一种常用的生成Handler对象的方法
这是在主线程中 mHandler 是成员变量 Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case 0: //在这里得到数据,并且可以直接更新UI String data = (String)msg.obj; updateWeather(); //刷新数据 textView.setText(data); break; default: break; } } }; 这是在子线程中 .... onClick(View v){ switch(v.getId()){ case R.id.bt: new Thread(new Runnable(){ @Override public void run() { //耗时操作, Http......网路请求的操作 //需要数据传递,用下面方法; Message msg =new Message(); msg.what = 0; msg.obj = "数据";//可以是基本类型,可以是对象,可以是List、map等; //完成之后发送消息给Handler mHandler.sendMessage(msg); } }).start(); } }
第二种方法:用Activity对象的runOnUiThread方法更新
//这是在Activity中: new Thread() { public void run() { //这儿是耗时操作,完成之后更新UI; http....网路请求 runOnUiThread(new Runnable(){ @Override public void run() { //更新UI imageView.setImageBitmap(bitmap); } }); } }.start(); //如果不在Activity中则需要得到上下文来调用 Activity activity = (Activity) imageView.getContext(); activity.runOnUiThread(new Runnable() { @Override public void run() { imageView.setImageBitmap(bitmap); } }); 如果Thread定义在别的地方,传递一个activity对象就行!
第三种方法:View.post(Runnable r)的方法
imageView.post(new Runnable(){ @Override public void run() { imageView.setImageBitmap(bitmap); } }); 需要在该方法中传递一个View对象
第四种方法Handler.post(Runnable r)方法
//通过点击按钮事件,执行网路耗时操作,得到的数据显示到UI上 主线程中 Handler handler = new Handler() ; public void onClick(View v) { //开启线程 new Thread(new Runnable() { @Override public void run() { String str= null;//这里必须要写上 = null !!初始化 try{ Thread.sleep(3000);//这里写网路请求操作 str = "网路请求得到的数据";//比如json数据 } catch (InterruptedException e) { e.printStackTrace(); } // 这里也必须声明为final final String finalStr = str; //调用方法Handler.post(r); handler.post(new Runnable() { @Override public void run() { //在这里将得到的数据更新到UI中 textView.setText(finalStr); } }); } }).start(); }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories