AsyncTask中的4个回调

onPreExecute(),在doInBackground(Params...)之前运行在UI线程中

onPostExecute(Result),在doInBackground(Params...)之后运行在UI线程中

onProgressUpdate(Progress...),在publishProgress(Progress...)被调用后运行在UI线程中

doInBackground(Params...),运行在子线程中,这个函数可以调用publishProgress以发布更新到UI线程

示例如下

  1. public class Md5AsyncTask extends AsyncTask<String, Long, String> {
  2. @Override
  3. protected void onPreExecute() {
  4. super.onPreExecute();
  5. Log.d(TAG, "onPreExecute() called");
  6. tv1.setText("已执行");
  7. }
  8.  
  9. @Override
  10. protected void onPostExecute(String s) {
  11. super.onPostExecute(s);
  12. Log.d(TAG, "onPostExecute(String) called");
  13. tv3.setText("已结束");
  14. tvResult.setText(s);
  15. }
  16.  
  17. @Override
  18. protected void onProgressUpdate(Long... values) {
  19. super.onProgressUpdate(values);
  20. tv2.setText(values[0] + "%");
  21. }
  22.  
  23. @Override
  24. protected String doInBackground(String... strings) {
  25. File file = new File(strings[0]);
  26. long fileSize = file.length();
  27. try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file))) {
  28. MessageDigest md5 = MessageDigest.getInstance("MD5");
  29. byte[] buffer = new byte[10 * 1024 * 1024];
  30. int numberOfBytesRead;
  31. long totalNumberOfBytesRead = 0;
  32. while ((numberOfBytesRead = bis.read(buffer)) != -1) {
  33. md5.update(buffer, 0, numberOfBytesRead);
  34. totalNumberOfBytesRead += numberOfBytesRead;
  35. publishProgress(totalNumberOfBytesRead * 100 / fileSize);
  36. }
  37. StringBuilder result = new StringBuilder();
  38. byte[] digested = md5.digest();
  39. for (byte e : digested) {
  40. String hexStr = Integer.toHexString(e & 255);
  41. if (hexStr.length() == 1)
  42. result.append('0');
  43. result.append(hexStr);
  44. }
  45. return result.toString();
  46. } catch (IOException | NoSuchAlgorithmException ex) {
  47. Log.e(TAG, null, ex);
  48. return null;
  49. }
  50. }
  51. }
  1. new Md5AsyncTask().execute(filename);

Android笔记之AsyncTask的更多相关文章

  1. Android应用开发学习笔记之AsyncTask

    作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz 在上一篇文章中我们学习了多线程和Handler消息处理机制,如果有计算量比较大的任务,可以创建一个新线程执行计算工作 ...

  2. Android笔记(三十六) AsyncTask是如何执行的?

    在上一个例子中,我们是在LoadImage的onPostExecute中修改的UI,不是说只允许在主线程中修改UI吗?我们看一下源代码是如何操作的. MainActicity.java package ...

  3. [转]【安卓笔记】AsyncTask源码剖析

    [转][安卓笔记]AsyncTask源码剖析 http://blog.csdn.net/chdjj/article/details/39122547 前言: 初学AsyncTask时,就想研究下它的实 ...

  4. Android笔记——Android中数据的存储方式(二)

    我们在实际开发中,有的时候需要储存或者备份比较复杂的数据.这些数据的特点是,内容多.结构大,比如短信备份等.我们知道SharedPreferences和Files(文本文件)储存这种数据会非常的没有效 ...

  5. Android笔记:触摸事件的分析与总结----TouchEvent处理机制

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://glblong.blog.51cto.com/3058613/1559320   ...

  6. Android开发之AsyncTask的使用

    Android API 3时引进了AsyncTask,也叫异步任务.使用它可以很方便的更新主线程中的UI,使用它比Handler.Thread更简单.由于AsyncTask是抽象类,要使用它首先要创建 ...

  7. Android 笔记之 R 文件

    Android笔记之R文件 h2{ color: #4abcde; } a{ color: blue; text-decoration: none; } a:hover{ color: red; te ...

  8. Android 笔记之 Android 系统架构

    Android笔记之Android系统架构 h2{ color: #4abcde; } a{ color: blue; text-decoration: none; } a:hover{ color: ...

  9. Android笔记之使用Glide加载网络图片、下载图片

    Glide简介 不想说太多,真的很方便:P)可以节省我不少时间 GitHub地址:https://github.com/bumptech/glide 加载网络图片到ImageView Glide.wi ...

随机推荐

  1. Json序列化为对象方法

    /// <summary>/// json 序列化为对象/// </summary>/// <typeparam name="T">对象类型&l ...

  2. Spring管理的bean初始化方法的三种方式,以及@PostConstruct不起作用的原因

    1:Spring 容器中的 Bean 是有生命周期的,spring 允许 Bean 在初始化完成后以及销毁前执行特定的操作.下面是常用的三种指定特定操作的方法: 通过实现InitializingBea ...

  3. Metadata publishing for this service is currently disabled.

    Reason 1: In your web.config <service name="A.B.C"> but your class is: namespace A.B ...

  4. List装form

    List<MemberPrivilegeForm> formlist = new ArrayList<MemberPrivilegeForm>(); int status = ...

  5. TP框架中/ThinkPHP/Library/Think/Storage/Driver/File.class.php 错误

        /ThinkPHP/Library/Think/Storage/Driver/File.class.php LINE: 48错误 这是一个将windows下运行正常的ThinkPHP框架移到L ...

  6. 个人观点,说一下对 PHPCMS 的站点架构的看法

    PHPCMS应该是国内第一家用MVC架构来写开源PHP产品的,我第一次工作上接触到PHPCMS是在两年前.那个时候对MVC还是不理解,然后由于工作须要,须要改动一下PHPCMS的源代码.拿到代码后.我 ...

  7. UE4射击小游戏原型

    尝试使用了下blueprint,不知道是bug还是不熟悉,blueprint有些地方运行的跟逻辑不太一样.不管ue4目前,快速做原型倒是蛮方便的.就等着官方发更多教程讲述关于新的matinee,Nav ...

  8. Windows下创建.gitgnore文件

    相信使用过git的朋友可能遇到过,直接在windows下创建.gitgnore文件失败.类似截图那样 上网查了一下,有两种方法. 方法1: 此方法较为简单,前提是安装了git bash. 用git b ...

  9. 涛哥的Python工具箱之批量删除含指定字符串行

    我们在软件研发中不可避免的要用到大量的反复性的繁琐的工作,比如批量改动代码中接口的字符串.批量下载文件并又一次按规则命名.这些工作人工做特别累,尤其是对我这样的懒人来说. 对于一个出色的程序猿来说,反 ...

  10. Apollo-open-capacity-platform 微服务能力开发平台 (转)

    来自大佬的apollo整合微服务的教程:欢迎大家点评和star,链接如下:https://gitee.com/owenwangwen/open-capacity-platform 官方demo链接:h ...