AsyncTask是Android解决异步加载的一种方案,它比Handler和Message的方式更加轻量级。

一般的使用步骤:

  1. 自定义一个继承AsyncTask的类。自定义时可以传入AsyncTask的3个泛型参数,即Params,Progress和Result。Params是需要传入的参数,Progress是进程执行的百分比,Result是最终返回的结果。

  2. 实现从AsyncTask继承下来的方法。

主要有onPreExecute()、doInBackground(Params...)、onProgressUpdate(Progress...)和onPostExecute(Result)四种方法。

其中,

onPreExecute():执行实际后台操作之前被调用。

doInBackground(Params...):紧跟onPreExecute()之后进行的实际后台操作,一般进行比较耗时                      的操作,更新实时任务进度,可以调用publishProgress()。

onProgressUpdate(Progress...):运行与UI线程,可更新实时进度。

onPostExecute(Result):运行于UI线程,其参数就是doInBackground()的返回值。

3.在主线程中创建AsyncTask对象,并调用execute()方法。

具体示例来展示AsyncTask异步加载:

MainActivity代码:

public class MainActivity extends Activity {

private TextView textview;

private Button button;

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

textview=(TextView)findViewById(R.id.text);

button=(Button)findViewById(R.id.button);

button.setOnClickListener(new View.OnClickListener() {

public void onClick(View arg0) {

// TODO Auto-generated method stub

LoadTask task=new LoadTask();

task.execute();

}

});

}

private class LoadTask extends AsyncTask<Void,Integer,String>{

private ProgressDialog progressdialog;

protected String doInBackground(Void... params) {

// TODO Auto-generated method stub

int sum=1;

while(sum<=10){

try {

Thread.sleep(1000);

publishProgress(sum);

sum++;

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

return "加载完成。";

}

//紧跟onPreExecute()之后紧跟的操作,进行耗时操作,利用publishprogress()更新。

@Override

protected void onPreExecute() {

// TODO Auto-generated method stub

progressdialog=progressdialog.show(MainActivity.this, "AsyncTask Demo", "载入中...",true);

}

//在doinbackground之前调用,创建一个对话框。

protected void onProgressUpdate(Integer...values){

textview.setText(values[0]*10+"%");

}

//运行于ui线程,更新实时进度。

protected void onPostExecute(String result){

progressdialog.dismiss();

textview.setText(result);

}

//运行于ui线程,返回值就是doInBackground()的返回值。

}

}

xml代码:

<TextView

android:id="@+id/text"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="--" />

<Button

android:id="@+id/button"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_alignParentLeft="true"

android:layout_below="@+id/text"

android:layout_marginTop="24dp"

android:text="开始载入" />

点击按钮,即可实现异步加载。

转载于:https://blog.51cto.com/bigcrab/1708766

异步加载AsyncTask小谈+实例相关推荐

  1. BUI Grid异步加载分页小计

    公司要做一个新的管理系统,因为老大嫌弃之前easyUI的版面太丑(......),要用BUI重新做一套,悲催的我开始研究BUI的控件,发现API描述的也不是太清楚,加载顺序也不太明确,在这里自己总结一 ...

  2. AsyncTask异步加载的源码分析与实现实例

    一 . AsyncTask Android的Lazy Load主要体现在网络数据(图片)异步加载.数据库查询.复杂业务逻辑处理以及费时任务操作导致的异步处理等方面.在介绍Android开发过程中,异步 ...

  3. 小程序 ajax 加载,小程序实战-小程序网络请求异步加载

    最初看到小程序的网络请求的时候,尤其是演示示例中,userInfoReadyCallback这个函数更是一头雾水.其实并不怎么理解.一直很费解.网上各路大侠都有解释,但是就是,不知道是怎么个顺序,而我 ...

  4. Android批量图片加载经典系列——使用LruCache、AsyncTask缓存并异步加载图片

    一.问题描述 使用LruCache.AsyncTask实现批量图片的加载并达到下列技术要求 1.从缓存中读取图片,若不在缓存中,则开启异步线程(AsyncTask)加载图片,并放入缓存中 2.及时移除 ...

  5. android学习笔记---64_ListView数据异步加载与AsyncTask

    2013/5/26 Java技术qq交流群:JavaDream:251572072 64_ListView数据异步加载与AsyncTask ------------------------------ ...

  6. Android 使用AsyncTask 后监听异步加载完毕的动作

    AsyncTask 的使用方法网上有很多例子,使用起来也非常的方便.这里就不详细说具体的使用方法了,同学可以Google 一下,很多. 场景模拟 当我们在加载一个列表的时候,比如GridView ,这 ...

  7. Android通过AsyncTask与ThreadPool(线程池)两种方式异步加载大量数据的分析与对比

    在加载大量数据的时候,经常会用到异步加载,所谓异步加载,就是把耗时的工作放到子线程里执行,当数据加载完毕的时候再到主线程进行UI刷新.在数据量非常大的情况下,我们通常会使用两种技术来进行异步加载,一是 ...

  8. Android 应用开发 之通过AsyncTask与ThreadPool(线程池)两种方式异步加载大量数据的分析与对比

    Android 应用开发 之通过AsyncTask与ThreadPool(线程池)两种方式异步加载大量数据的分析与对比 标签: AndroidAsyncTaskThreadPool异步加载view 2 ...

  9. 浅谈Android中的异步加载之ListView中图片的缓存及优化三

    隔了很久没写博客,现在必须快速脉动回来.今天我还是接着上一个多线程中的异步加载系列中的最后一个使用异步加载实现ListView中的图片缓存及其优化.具体来说这次是一个综合Demo.但是个人觉得里面还算 ...

最新文章

  1. 一个客户机-服务器系统使用了卫星网络,客户机/服务器体系结构可用于局域网、广域网和WWW。这三种用途迥异的网络的一个共同特点是工作负 - 试题答案网问答...
  2. win10未开启没有运行无线服务器,win10系统提示共享无线自动配置服务没有自动运行的解决办法...
  3. ns2的第一个tcl脚本
  4. IP地址,子网掩码、默认网关,DNS服务器是什么意思
  5. STM32开发 -- PMIC、I2C详解
  6. 高新面试系列 性格篇
  7. 瑞星2008网络版序列号大全
  8. asyn4j -- java 异步方法调用框架
  9. 163邮箱:退信代码(对照表) - 说明篇
  10. Vue.js项目去除url中的#/ - 解决篇
  11. 如何禁止chrome浏览器http自动转成https 【转】
  12. 李萍matlab实验报告,李萍, 张磊, 王垚廷. 基于Matlab的偏微分方程数值计算[J]. 齐鲁工业大学学报, 2017, 31(4): 39-43....
  13. greenshot滚屏截图_Greenshot是一款免费的轻量级屏幕截图实用程序,具有许多有用的功能...
  14. bp神经网络优化算法对比,bp神经网络的优化算法
  15. 背景颜色、字体等的不透明区别 (opacity、transparent以及rgba的区别)
  16. 总结揭露黑客入侵网站的手法
  17. XAMPP下的Tomcat 7运行出现“1% 不是有效的 Win32 应用程序。”
  18. 树状数组入门——以洛谷3374为例
  19. 一个苏州IT人的5年挨踢经历-------未来篇
  20. 20230425-PAT甲级1168

热门文章

  1. 这简直比高考容易多了...3个月自学转行软件测试,懒散人的一次自我突破!
  2. Seldom2.0: 如何更简单的实现HTTP接口测试
  3. pytorch Inception代码实现
  4. pyhton的切片操作
  5. 导出表结构_十分钟教你轻松掌握移动PE导出表,快来学习!
  6. 数据库管理学习笔记(一)——实体关系建模
  7. 动手学深度学习Pytorch Task07
  8. 最新发布!《统计学习方法》第二版无监督学习视频课上线了!
  9. QQ浏览器下拉词推广是什么?
  10. 在哪里定义_定义市场的关键字:找出它们在哪里使用,以便您可以抢占该市场...