Androidの多线程之更新ui(AsyncTask)
AsyncTask
构造(泛型参数)
外部步骤:
AsyncTask task = new AsyncTask<params,values,result>();
task.exec(params);
内部流程:
1.void onPreExecute() ;//里头可放些提醒类的东西
2.result doInBackground(params){publishProgress(values);};//执行任务,取得结果并返回
3.void onProgressUpdate(values);//接收publishProgress()参数,可以更新进度
4.void onPostExecute(result);//执行完成,取得结果,可在UI上展示
1 package com.bvin.aync; 2 3 import java.io.IOException; 4 5 import org.apache.http.HttpResponse; 6 import org.apache.http.client.ClientProtocolException; 7 import org.apache.http.client.HttpClient; 8 import org.apache.http.client.methods.HttpGet; 9 import org.apache.http.impl.client.DefaultHttpClient; 10 11 import android.app.Activity; 12 import android.app.ProgressDialog; 13 import android.graphics.Bitmap; 14 import android.graphics.BitmapFactory; 15 import android.os.AsyncTask; 16 import android.os.Bundle; 17 import android.os.Handler; 18 import android.os.Message; 19 import android.view.View; 20 import android.widget.Button; 21 import android.widget.ImageView; 22 import android.widget.Toast; 23 24 public class AyncActivity extends Activity { 25 /** Called when the activity is first created. */ 26 private ImageView iv; 27 private ProgressDialog dialog; 28 @Override 29 public void onCreate(Bundle savedInstanceState) { 30 super.onCreate(savedInstanceState); 31 setContentView(R.layout.main); 32 33 initViews(); 34 } 35 36 private void initViews(){ 37 Button bt = (Button)findViewById(R.id.bt); 38 iv = (ImageView)findViewById(R.id.iv); 39 40 bt.setOnClickListener(new View.OnClickListener() { 41 42 @Override 43 public void onClick(View v) { 44 // TODO Auto-generated method stub 45 loadImages(); 46 } 47 }); 48 49 dialog = new ProgressDialog(this); 50 51 } 52 53 private void loadImages(){ 54 55 LoadImageTask task = new LoadImageTask(); 56 task.execute("http://avatar.csdn.net/0/3/4/1_mylzc.jpg"); 57 } 58 59 class LoadImageTask extends AsyncTask<String,Integer,Bitmap>{ 60 61 @Override 62 protected Bitmap doInBackground(String... params) { 63 // TODO Auto-generated method stub 64 Bitmap bitmap = null; 65 HttpGet get = new HttpGet(params[0]); 66 HttpClient client = new DefaultHttpClient(); 67 try { 68 HttpResponse res = client.execute(get); 69 bitmap = BitmapFactory.decodeStream(res.getEntity().getContent()); 70 } catch (ClientProtocolException e) { 71 // TODO Auto-generated catch block 72 e.printStackTrace(); 73 } catch (IOException e) { 74 // TODO Auto-generated catch block 75 e.printStackTrace(); 76 } 77 78 79 return bitmap; 80 } 81 82 @Override 83 protected void onPostExecute(Bitmap result) { 84 // TODO Auto-generated method stub 85 super.onPostExecute(result); 86 dialog.dismiss(); 87 if(result!=null){ 88 iv.setImageBitmap(result); 89 Toast.makeText(AyncActivity.this, "图片下载成功", 1000).show(); 90 91 }else{ 92 93 Toast.makeText(AyncActivity.this, "图片下载失败", 1000).show(); 94 } 95 96 } 97 98 @Override 99 protected void onPreExecute() { 100 // TODO Auto-generated method stub 101 super.onPreExecute(); 102 dialog.show(); 103 } 104 105 @Override 106 protected void onProgressUpdate(Integer... values) { 107 // TODO Auto-generated method stub 108 super.onProgressUpdate(values); 109 } 110 111 112 113 114 115 } 116 }
Androidの多线程之更新ui(AsyncTask)相关推荐
- Androidの多线程之更新ui(Thread+Handler+Message)
流程: 1.点击开始,显示进度对话框,启动线程,循环发送消息(1-100) 2.更新对话框中的进度,和标题栏的进度 3.到达最大进度值时,关闭对话框,标题栏显示更新完成 解析: 1.在主线程处理han ...
- Android多线程界面更新方法的总结
Android多线程与界面交互的方法 Activity.runOnUiThread(Runnable) View.post(Runnable),View.postDelay(Runnable,long ...
- Android子线程更新UI的方法总结
消息机制,对于Android开发者来说,应该是非常熟悉.对于处理有着大量交互的场景,采用消息机制,是再好不过了.有些特殊的场景,比如我们都知道,在Android开发中,子线程不能更新UI,而主线程又不 ...
- android动画如何更新UI(ValueAnimator源码解析)
概述 android动画经常会碰到卡顿,或者阻塞主进程之类的问题. 为了排查此类问题,不得不对动画原理了解一二,于是作此文. 此文围绕两个主线问题展开: ui更新的频率是如何控制的? 比如,1秒内会更 ...
- java 更新ui_你怎么解决Android开发中更新UI报错的异常吗-百度经验
执行上述代码. 在App中点击"变透明"的按钮后,App就退出了. logcat中打印了这个错: 03-20 14:47:31.326 11640-11796/com.exampl ...
- Android多线程UI更新-Handler
Handler 处理程序允许您发送和处理Message与线程关联的可运行对象MessageQueue.每个 Handler 实例都与单个线程和该线程的消息队列相关联.当你创建一个新的 Handler ...
- android java 多线程,Android多线程的四种方式
当我们启动一个App的时候,Android系统会启动一个Linux Process,该Process包含一个Thread,称为UI Thread或Main Thread.通常一个应用的所有组件都运行在 ...
- 为什么子线程中不能直接更新UI
点击上方"dotNET全栈开发","设为星标" 加"星标★",每天11.50,好文必达 全文约4000字,预计阅读时间8分钟 当初有同事就碰 ...
- Android异步处理二:AsynTask介绍和使用AsyncTask异步更新UI界面
做一下如何同构AsyncTask异步任务来更新UI界面. (1)AsyncTask的介绍 通过上图中的AsyncTask的源码结构图可以看到,主要用于重载的方法是doInBackground(),on ...
最新文章
- 伪类的使用之如何在一段文字前面添加一个点
- AIX卷管理介绍以及利用空闲PP来创建文件系统
- vscode较详细注释的汇编语言hello world 输出程序,第一个汇编程序
- 备忘:VC++ 中的异常处理
- Android 中的冷启动和热启动
- bzoj 3437: 小P的牧场
- xctf-supersqli
- 计算机网络发展的第四阶段特点,计算机网络基础考试重点.doc
- linux后加网卡,Linux添加网卡教程
- 敏锐嗅出商机,她瞄准花卉市场的空白,将花店开出名气
- 少儿平台e启学用户隐私协议
- oracle计算日期倒计时,时间倒算回去到了哪里?│机械倒数计时码表
- 阿里的黄金时代|一点财经
- 05.17 佘山踏青“徒步爬山” 活动回顾
- 解决小程序自定义底部菜单切换闪动
- TortoiseSVN控制台提交命令
- Leon‘s Life
- 计算机一级考试文字处理题知识
- web核心 8-filter过滤器 listener监听器 相对路径 绝对路径 项目名路径
- docker: cloud not select device driver with “capabilities:[[gpu]]“
热门文章
- Ubuntu12.04 安装MySQL简单步骤
- 健身励志——肌肉不经锤炼不会增长
- 淘气的页数 - 格式化字符串
- 树莓派保卫战--防止SSH暴力破解
- Timestamp、String、Date之间的转换
- linux下安装配置使用memcache,memcached,libevent(后有ubuntu的memcache安装)
- android无法实例化服务,Android:无法实例化类:没有空的构造函数
- EdgeGallery — MEP — 系统架构
- 5G 信令流程 — UE 寻呼(Paging)流程
- C 语言编程 — 高级数据类型 — 指针