Android笔记之AsyncTask
AsyncTask中的4个回调
onPreExecute(),在doInBackground(Params...)之前运行在UI线程中
onPostExecute(Result),在doInBackground(Params...)之后运行在UI线程中
onProgressUpdate(Progress...),在publishProgress(Progress...)被调用后运行在UI线程中
doInBackground(Params...),运行在子线程中,这个函数可以调用publishProgress以发布更新到UI线程
示例如下
- public class Md5AsyncTask extends AsyncTask<String, Long, String> {
- @Override
- protected void onPreExecute() {
- super.onPreExecute();
- Log.d(TAG, "onPreExecute() called");
- tv1.setText("已执行");
- }
- @Override
- protected void onPostExecute(String s) {
- super.onPostExecute(s);
- Log.d(TAG, "onPostExecute(String) called");
- tv3.setText("已结束");
- tvResult.setText(s);
- }
- @Override
- protected void onProgressUpdate(Long... values) {
- super.onProgressUpdate(values);
- tv2.setText(values[0] + "%");
- }
- @Override
- protected String doInBackground(String... strings) {
- File file = new File(strings[0]);
- long fileSize = file.length();
- try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file))) {
- MessageDigest md5 = MessageDigest.getInstance("MD5");
- byte[] buffer = new byte[10 * 1024 * 1024];
- int numberOfBytesRead;
- long totalNumberOfBytesRead = 0;
- while ((numberOfBytesRead = bis.read(buffer)) != -1) {
- md5.update(buffer, 0, numberOfBytesRead);
- totalNumberOfBytesRead += numberOfBytesRead;
- publishProgress(totalNumberOfBytesRead * 100 / fileSize);
- }
- StringBuilder result = new StringBuilder();
- byte[] digested = md5.digest();
- for (byte e : digested) {
- String hexStr = Integer.toHexString(e & 255);
- if (hexStr.length() == 1)
- result.append('0');
- result.append(hexStr);
- }
- return result.toString();
- } catch (IOException | NoSuchAlgorithmException ex) {
- Log.e(TAG, null, ex);
- return null;
- }
- }
- }
- new Md5AsyncTask().execute(filename);
Android笔记之AsyncTask的更多相关文章
- Android应用开发学习笔记之AsyncTask
作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz 在上一篇文章中我们学习了多线程和Handler消息处理机制,如果有计算量比较大的任务,可以创建一个新线程执行计算工作 ...
- Android笔记(三十六) AsyncTask是如何执行的?
在上一个例子中,我们是在LoadImage的onPostExecute中修改的UI,不是说只允许在主线程中修改UI吗?我们看一下源代码是如何操作的. MainActicity.java package ...
- [转]【安卓笔记】AsyncTask源码剖析
[转][安卓笔记]AsyncTask源码剖析 http://blog.csdn.net/chdjj/article/details/39122547 前言: 初学AsyncTask时,就想研究下它的实 ...
- Android笔记——Android中数据的存储方式(二)
我们在实际开发中,有的时候需要储存或者备份比较复杂的数据.这些数据的特点是,内容多.结构大,比如短信备份等.我们知道SharedPreferences和Files(文本文件)储存这种数据会非常的没有效 ...
- Android笔记:触摸事件的分析与总结----TouchEvent处理机制
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://glblong.blog.51cto.com/3058613/1559320 ...
- Android开发之AsyncTask的使用
Android API 3时引进了AsyncTask,也叫异步任务.使用它可以很方便的更新主线程中的UI,使用它比Handler.Thread更简单.由于AsyncTask是抽象类,要使用它首先要创建 ...
- Android 笔记之 R 文件
Android笔记之R文件 h2{ color: #4abcde; } a{ color: blue; text-decoration: none; } a:hover{ color: red; te ...
- Android 笔记之 Android 系统架构
Android笔记之Android系统架构 h2{ color: #4abcde; } a{ color: blue; text-decoration: none; } a:hover{ color: ...
- Android笔记之使用Glide加载网络图片、下载图片
Glide简介 不想说太多,真的很方便:P)可以节省我不少时间 GitHub地址:https://github.com/bumptech/glide 加载网络图片到ImageView Glide.wi ...
随机推荐
- Json序列化为对象方法
/// <summary>/// json 序列化为对象/// </summary>/// <typeparam name="T">对象类型&l ...
- Spring管理的bean初始化方法的三种方式,以及@PostConstruct不起作用的原因
1:Spring 容器中的 Bean 是有生命周期的,spring 允许 Bean 在初始化完成后以及销毁前执行特定的操作.下面是常用的三种指定特定操作的方法: 通过实现InitializingBea ...
- 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 ...
- List装form
List<MemberPrivilegeForm> formlist = new ArrayList<MemberPrivilegeForm>(); int status = ...
- TP框架中/ThinkPHP/Library/Think/Storage/Driver/File.class.php 错误
/ThinkPHP/Library/Think/Storage/Driver/File.class.php LINE: 48错误 这是一个将windows下运行正常的ThinkPHP框架移到L ...
- 个人观点,说一下对 PHPCMS 的站点架构的看法
PHPCMS应该是国内第一家用MVC架构来写开源PHP产品的,我第一次工作上接触到PHPCMS是在两年前.那个时候对MVC还是不理解,然后由于工作须要,须要改动一下PHPCMS的源代码.拿到代码后.我 ...
- UE4射击小游戏原型
尝试使用了下blueprint,不知道是bug还是不熟悉,blueprint有些地方运行的跟逻辑不太一样.不管ue4目前,快速做原型倒是蛮方便的.就等着官方发更多教程讲述关于新的matinee,Nav ...
- Windows下创建.gitgnore文件
相信使用过git的朋友可能遇到过,直接在windows下创建.gitgnore文件失败.类似截图那样 上网查了一下,有两种方法. 方法1: 此方法较为简单,前提是安装了git bash. 用git b ...
- 涛哥的Python工具箱之批量删除含指定字符串行
我们在软件研发中不可避免的要用到大量的反复性的繁琐的工作,比如批量改动代码中接口的字符串.批量下载文件并又一次按规则命名.这些工作人工做特别累,尤其是对我这样的懒人来说. 对于一个出色的程序猿来说,反 ...
- Apollo-open-capacity-platform 微服务能力开发平台 (转)
来自大佬的apollo整合微服务的教程:欢迎大家点评和star,链接如下:https://gitee.com/owenwangwen/open-capacity-platform 官方demo链接:h ...