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的更多相关文章
随机推荐
- Python日期时间函数处理
所有日期.时间的 api 都在datetime模块内. 1 日期的格式化输出 datetime => string import datetime now = datetime.datetime ...
- POJ 3140-Contestants Division(树形dp)
题意: n给节点的树,分成两个联通分支,使它们大小的绝对值最小,求这个最小值. 分析: 分成两个联通分支,即删除一条边,开始看到m(边数)和n(点数)没什么关系,但题目说的是一棵树,则m==n-1,求 ...
- HDU4289 Control 最大流
经典题,求去掉若干个点,使得两个点不在连通,总价值最少 所以拆点最小割,除了拆点边,流量都为无穷,拆点边是流量为价值 #include <iostream> #include <cs ...
- CentOS上安装MySQL
1.准备RPM安装包 MySQL-server-5.6.33-1.linux_glibc2.5.x86_64 MySQL-client-5.6.33-1.linux_glibc2.5.x86_64 2 ...
- eclipse配置tomcat加大内存的方法
双击tomcat -Dcatalina.base="E:\work\whykt\.metadata\.plugins\org.eclipse.wst.server.core\tmp0&quo ...
- 自编译安装nginx
1. 下载nginx,并解压 http://nginx.org/ 2. 下载health check模块 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 1 ...
- FreeModbus Slave For AVR源代码 精简版2 【worldsing 笔记】
FreeModbus 源码:点击下载 线圈BUG解决(后来发现不一定是BUG) 1.eMBException eMBFuncWriteCoil( UCHAR * pucFrame, USHORT * ...
- Idea的Git使用
在使用Git来pull和push代码的时候会发生冲突的情况,如果处理不当则会出现无法pull和push代码的情况.所以这个是十分有必要注意的. 那么我来说几句自己的总结吧: 1.先看下idea的Git ...
- http 需要掌握的知识点(一)
超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议.HTTP 也属于 TCP/IP 协议族的子集,想要学习 HTTP ,先需要了解 ...
- Web- HTML网页颜色大全
按色相的搭配分类 列举一些最为代表常见的颜色值,让你能快速的找到自己想要的代码 红色 #FFFFCC#CCFFFF#FFCCCC #99CCCC#FFCC99#FFCCCC #FF9999#99669 ...