AsyncTask简介

Android的UI线程主要处理用户的按键,触屏和View的绘制等,不能在里面处理耗时的操作,否则会出现ANR,因此耗时的操作要单独开一个线程处理,但是新线程不能直接处理UI线程的View。



AsyncTask的使用方法





代码示例

本实例只有一个按钮和文本框,点击按钮从网络下载数据,然后又在文本框显示。

  1. package peng.liu.test;
  2. import android.app.Activity;
  3. import android.app.ProgressDialog;
  4. import android.content.Context;
  5. import android.os.AsyncTask;
  6. import android.os.Bundle;
  7. import android.view.View;
  8. import android.widget.TextView;
  9. import java.io.BufferedReader;
  10. import java.io.InputStreamReader;
  11. import java.net.MalformedURLException;
  12. import java.net.URL;
  13. import java.net.URLConnection;
  14. public class MainActivity extends Activity{
  15. private TextView tvAsync;
  16. @Override
  17. protected void onCreate(Bundle savedInstanceState) {
  18. super.onCreate(savedInstanceState);
  19. setContentView(R.layout.activity_main);
  20. tvAsync = (TextView) findViewById(R.id.tvAsync);
  21. }
  22. public void download(View source) throws MalformedURLException {
  23. DownTask downTask = new DownTask(this);
  24. downTask.execute(new URL("http://www.carzyit.org/ethos.php"));
  25. }
  26. class DownTask extends AsyncTask<URL,Integer,String>{
  27. ProgressDialog dialog;
  28. int hasdata;
  29. Context context;
  30. public DownTask(Context ctx){
  31. this.context = ctx;
  32. }
  33. @Override
  34. protected String doInBackground(URL... urls) {
  35. StringBuilder sb = new StringBuilder();
  36. try {
  37. URLConnection conn = urls[0].openConnection();
  38. BufferedReader bf = new BufferedReader(new InputStreamReader(conn.getInputStream(),"utf-8"));
  39. String line = null;
  40. while ((line = bf.readLine()) != null){
  41. sb.append(line);
  42. hasdata++;
  43. publishProgress(hasdata);
  44. }
  45. return sb.toString();
  46. }
  47. catch (Exception e){
  48. e.printStackTrace();
  49. }
  50. return null;
  51. }
  52. @Override
  53. protected void onPostExecute(String s) {
  54. tvAsync.setText(s);
  55. dialog.dismiss();
  56. }
  57. @Override
  58. protected void onPreExecute() {
  59. dialog = new ProgressDialog(context);
  60. dialog.setTitle("hello");
  61. dialog.setCancelable(false);
  62. dialog.setMessage("world");
  63. dialog.setMax(202);
  64. dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
  65. dialog.setIndeterminate(false);
  66. dialog.show();
  67. }
  68. @Override
  69. protected void onProgressUpdate(Integer... values) {
  70. tvAsync.setText(hasdata+"");
  71. dialog.setProgress(values[0]);
  72. }
  73. }
  74. }

AsyncTask(异步任务)讲解-android的学习之旅(四十六)的更多相关文章

  1. Android简易实战教程--第四十六话《RecyclerView竖向和横向滚动》

    Android5.X后,引入了RecyclerView,这个控件使用起来非常的方便,不但可以完成listView的效果,而且还可以实现ListView无法实现的效果.当然,在新能方便也做了大大的提高. ...

  2. Dynamic CRM 2013学习笔记(四十六)简单审批流的实现

    前面介绍过自定义审批流: Dynamic CRM 2013学习笔记(十九)自定义审批流1 - 效果演示 Dynamic CRM 2013学习笔记(二十一)自定义审批流2 - 配置按钮 Dynamic ...

  3. android布局Relative和gridLayout-android学习之旅(十六)

    Relative布局简介 相对布局的组件是由兄弟组件和父组价决定的,因此这种布局被称为相对布局. 属性设置介绍 RelativeLayout.Layoutparam中只能设置为true和false的属 ...

  4. Android破解学习之路(十六)—— dll破解的IL指令

    IL指令介绍 IL是.NET框架中中间语言(Intermediate Language)的缩写. 使用.NET框架提供的编译器可以直接将源程序编译为.exe或.dll文件,但此时编译出来的程序代码并不 ...

  5. python学习之旅(十六)

    Python基础知识(15):模块 1.可以把模块想象成导入Python以增强其功能的扩展 2.任何程序都可以作为模块导入 3.导入模块并不意味着在导入的时候执行某些操作,它们主要用于定义变量.函数和 ...

  6. Python学习笔记(四十六)网络编程(2)— UDP编程

    摘抄:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014320049779 ...

  7. 【WPF学习】第四十六章 效果

    WPF提供了可应用于任何元素的可视化效果.效果的目标是提供一种简单的声明式方法,从而改进文本.图像.按钮以及其他控件的外观.不是编写自己的绘图代码,而是使用某个继承自Effect的类(位于System ...

  8. 四十六、android中的Bitmap

    四十六.android中的Bitmap: http://www.cnblogs.com/linjiqin/archive/2011/12/28/2304940.html 四十七.实现调用Android ...

  9. 深度学习课程笔记(十六)Recursive Neural Network

    深度学习课程笔记(十六)Recursive Neural Network  2018-08-07 22:47:14 This video tutorial is adopted from: Youtu ...

随机推荐

  1. RAC基本原理

    RAC基本原理 什么是RAC? 多个实例跑在多个服务器上 一个数据库存放在共享的存储上,所有实例都可以访问 实例之间通过内联网络交换数据和信息 共享存储内容:数据文件.REDO.UNDO.控制文件 参 ...

  2. thymeltesys-基于Spring Boot Oauth2的扫码登录框架

    thymeltesys thymelte是一个基于Spring Boot Oauth2的扫码登录框架,使用PostgreSQL存储数据,之后会慢慢支持其他关系型数据库.即使你不使用整个框架,只使用其中 ...

  3. this指针是什么?

    this指针的用处: 一个对象的this指针并不是对象本身的一部分.不会影响sizeof(对象)的结果.this的作用域在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本 ...

  4. js匿名函数,闭包

    http://www.cnblogs.com/chenxianbin89/archive/2010/01/28/1658392.html

  5. 解决$.ajax()在IE10以下失效的问题

    一.问题重现 本地的脚本请求测试环境的接口 $.ajax({ url: ***, type: GET, data: data, success: function (data) { **** } }) ...

  6. SQL注入原理及绕过安全狗

    1.什么是SQL注入攻击 SQL注入攻击指的是通过构造特殊的输入作为参数插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令 http://www.xxx.com/list. ...

  7. 利用Python进行数据分析——Ipython

    利用Python进行数据分析--Ipython 一.Ipython一些常用命令 1.TAB自动补全 2.变量+? 显示相关信息 3.函数名+??可以获取函数的代码 4.使用通配符* np.load? ...

  8. Appium--入门demo

    Appium环境搭建已经在在博客中写出 http://www.cnblogs.com/feimaoyuzhubaobao/p/5057832.html   那么本篇博客主要介绍java版本的appiu ...

  9. Docker 删除容器

    可以使用 docker rm 来删除一个处于终止状态的容器. 例如 $sudo docker rm trusting_newton trusting_newton 如果要删除一个运行中的容器,可以添加 ...

  10. JVM初探- 使用堆外内存减少Full GC

    JVM初探-使用堆外内存减少Full GC 标签 : JVM 问题: 大部分主流互联网企业线上Server JVM选用了CMS收集器(如Taobao.LinkedIn.Vdian), 虽然CMS可与用 ...