Android_AsyncTask_Method
package com.example.day07_asynctask_method; import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.Bitmap;
import android.util.Log;
import android.view.Menu;
import android.view.View;
/**
1.问题:当我们请求网络数据,解析大数据,读写大数据时 ,需要进行耗时操作---用户体验差
当用户频繁的执行耗时操作时,会出现程序无法响应异常
当用户进行操作(如点击屏幕),程序在5s内没有进行响应,就会出现程序无法响应异常---anr异常
原因:阻塞了主线程
解决: 把耗时操作放到子线程中去执行 2.问题: Only the original thread that created a view hierarchy can touch its views.
只能在主线程(ui线程)中进行ui的修改操作 解决:把数据发送到主线程,让主线程去修改ui 3.asyncTask 异步任务 --- 在子线程中进行耗时操作,耗时操作完后自动的将数据发送到主线程,用户在主线程进行数据操作
1.去继承asyncTask抽象类
2.实现未实现的方法
3.调用,执行该类 *
* @author my
*
*/
public class MainActivity extends Activity { public static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
//下载图片按钮点击事件
public void onDownLoadImg(View v){
//执行异步任务
new MyAsynctask().execute("需传参数");
}
/**
* 方法执行顺序 onPreExecute-doInBackground--onPostExecute
* @author my
*
*/
class MyAsynctask extends AsyncTask<String, Integer, Bitmap>{
/**
* 在主线程中执行--在doInBackground方法前执行,通常显示正在加载提示
*/
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
Log.i(TAG, "MainActivity--onPreExcute--threadName ="+Thread.currentThread().getName()+",id = "+Thread.currentThread().getId());
}
/*
* 在子线程中执行--执行耗时操作,
* 参数类型与该类泛型的第一个参数一致,与执行者的execute的参数类型也对应,execute的参数会传到doInBackground方法中
* 返回值类型与类的第三个参数一致,与onPostExecute方法中传入的参数也一致
* 耗时操作执行完后才能后会将结果传给onPostExecute方法
*
*/
@Override
protected Bitmap doInBackground(String... params) {
// TODO Auto-generated method stub
Log.i(TAG, "MainActivity--doInBackground--threadName ="+Thread.currentThread().getName()+",id = "+Thread.currentThread().getId());
return null;
}
/**
* 在主线程中执行--用来处理结果(通常用来显示数据)
* 会接收doInBackground传过来的数据
*/ @Override
protected void onPostExecute(Bitmap result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
Log.i(TAG, "MainActivity--onPostExecute--threadName ="+Thread.currentThread().getName()+",id = "+Thread.currentThread().getId());
}
/**
* 用来更新进度时调用--在主线程中执行
* 调用需要用户去执行
* 参数类型与该类泛型的第二个参数对应,一般表示当前的加载进度
*/
@Override
protected void onProgressUpdate(Integer... values) {
// TODO Auto-generated method stub
super.onProgressUpdate(values);
} } }
Android_AsyncTask_Method的更多相关文章
随机推荐
- POJ 1258 Agri-Net
题意:给一个无向图的邻接矩阵,求最小生成树. 解法:Kruskal算法.把边按边权排序,从小到大插入生成树中,如果一个边的两个点都在生成树中则不插入,用并查集维护. 代码: #include<s ...
- C# 中类和结构的区别
转角撞倒猪原文C# 中类和结构的区别
- SQL Server 外键约束的例子
外键约束的测试表与测试数据 -- 创建测试主表. ID 是主键. CREATE TABLE test_main ( id INT, value ), PRIMARY KEY(id) ); -- 创建测 ...
- uva11992-Fast Matrix Operations(区间增值、改值)
题意: r行c列的全0矩阵 有三种操作 1 x1 y1 x2 y2 v子矩阵(x1,y1,x2,y2)所有元素增加v 2 x1 y1 x2 y2 v子矩阵(x1,y1,x2,y2)所有元素设为v ...
- bzoj 1058 [ZJOI2007]报表统计(set)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1058 [题意] 一个序列,提供插入,查询相邻最小差值,查询任意最小差值的操作. [思路 ...
- linux set
linux set 命令 功能说明:设置shell. 语 法:set [+-abCdefhHklmnpPtuvx] 补充说明:用set 命令可以设置各种shell选项或者列 出shell变量.单个选 ...
- Android实例-监测网络状态及一些事件(XE8+小米2)
结果: 1.网络连接:是指现在可不可以上网(你非要问我什么是网,我会K你呀的). 2.WIFI网络:是指现在可以上网,用的是不是WIFI网络(如果你打开了WIFI那它会显示正在使用WIFI). 3.移 ...
- Android实例-消息框(XE8+小米2)
方法一支持. 方法二与方法三都是三方单元,功能相同. 方法4与方法5报错,提示平台不支持. 第三方单元一: unit Android.JNI.Toast; // Java bridge class i ...
- 第九章、文件与文件系统的压缩与打包 Linux 系统常见的压缩命令
Linux 系统常见的压缩命令: 在Linux中,压缩文件的扩展名大多是:『*.tar, *.tar.gz, *.tgz, *.gz, *.Z, *.bz2』 Linux 支持的压缩命令非常多,且不同 ...
- 第十一章、认识与学习 BASH 数据流重导向
数据流重导向就是将某个命令运行后应该要出现在屏幕上的数据, 给它导向到其他的地方,例如文件或者是装置 (例如打印机之类的)! 什么是数据流重导向 命令运行过程如下: 图 5.1.1.命令运行过程的数据 ...