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 ...
随机推荐
- winrm.cmd
C:\Windows\system32>winrm.cmdWindows 远程管理命令行工具 Windows 远程管理(WinRM)是 WS-Management 协议的 Microsoft 实 ...
- Node.js 本地Xhr取得Node.js服务端数据的例子
本以为用XHR取Nodejs http出的一段文字很简单,因为xhr取值和nodejs http出文字都是好弄的,谁知一试不是这回事,中间有个关键步骤需要实现. nodejs http出文字显示在浏览 ...
- 倍福TwinCAT(贝福Beckhoff)基础教程2.2 TwinCAT常见类型使用和转换_字符串
一般声明字符串都会加一个长度的限制,比如A:STRING(80);至于真实的字符串长度不要超过这个限制即可 在测试中,我演示了两个字符串的方法,CONCAT字符串拼接和REPLACE字符串替换.拼 ...
- js - 正斜杆网址转换
2018-8-7(更新) let http = 'http://www.baidu.com/com/img/1.jpg'; let https = 'http:\\www.baidu.com\\com ...
- defer,panic,recover
Go语言不支持传统的 try…catch…finally 这种异常,因为Go语言的设计者们认为,将异常与控制结构混在一起会很容易使得代码变得混乱.因为开发者很容易滥用异常,甚至一个小小的错误都抛出一个 ...
- JDBC编程理论知识(1)
1.SUN公司为统一对数据库的操作,定义了一套Java操作数据库的规范,称之为JDBC 2.JDBC全称为:Java Data Base Connectivity(java数据库连接),它主要由接口组 ...
- java如何实现多个线程并发运行
随着计算机技术的发展,编程模型也越来越复杂多样化.但多线程编程模型是目前计算机系统架构的最终模型.随着CPU主频的不断攀升,X86架构的硬件已经成为瓶,在这种架构的CPU主频最高为4G.事实上目前3. ...
- 如何快速复制BAT级的DevOps工具链
1.流水线改变世界 1910年,福特汽车在引入流水线生产之后,Model-T 的组装时间缩短了8倍,从12.5小时降到了1.5小时,这就是流水线改变世界的神话,造就了汽车上的国家! 那流水线怎么改变软 ...
- secureCrt Linux 文件传输
1.在secureCRT终端下输入rz命令,查看Linux是否安装rz文件传输服务 如果提示未安装则先安装rz服务:安装命令: apt-get install lrzsz 2.进入要上传的目的文件 ...
- 07 在Windows下编译Memcached
一:windows下编译Memcached (1)下载地址dll:http://down.51cto.com/data/442606 (2)在php下输出 echo phpinfo():查看php的版 ...