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的更多相关文章

随机推荐

  1. 32、handler更新控件值

    import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os. ...

  2. JRebel 5.3.2

    http://www.blogjava.net/xylz/archive/2013/09/15/404098.html   此为单文件版本,无需license文件 IDE(Eclipse.IDEA可能 ...

  3. 树莓pi快速ssh【校园网】

    校园网是NAT后的,没有显示器,我把路由器的DHCP服务关了,这样的情况下怎么ssh到树莓pi? 把树莓pi 连到路由器上(已经关闭DHCP),手机安装FING https://play.google ...

  4. mac远程连接 win8

    首先 打开组策略 .windows8 下 按win+R 可以唤出运行,输入[gpedit.msc]按下 回车键 选择[计算机配置]>[管理模板]>[Windows组件]>[远程桌面服 ...

  5. as3+java+mysql(mybatis) 数据自动工具(五)

    现在介绍常量的配置,主要用于客户端(as3)与服务端(java)之间的常量同步,比如错误码.请求标识等 配置格式: <macros name="Macros" groupSt ...

  6. LeetCode题解——Longest Palindromic Substring

    题目: 给定一个字符串S,返回S中最长的回文子串.S最长为1000,且最长回文子串是唯一. 解法: ①遍历,对于每个字符,计算以它为中心的回文子串长度(长度为奇数),同时计算以它和右边相邻字符为中心的 ...

  7. Python环境变量设置

    在Windows环境下安装了python后,为了方便运行.py文件,可以设置环境变量如下: 环境变量位置 添加值 添加后效果 系统变量中的PATH python.exe所在目录,比如D:\Python ...

  8. [LeetCode]Linked List Cycle II解法学习

    问题描述如下: Given a linked list, return the node where the cycle begins. If there is no cycle, return nu ...

  9. vs2013下git的使用

    一.将VS2013项目托管到Git 现在的开源项目越来越多,我们会注意到这些开源项目大多共享在GitHub上面,包括微软开源的项目也在Github上,当然,如果你用过Git后,会发现Git确实不错,其 ...

  10. Java HashMap 源码解析

    今天正式开始分析具体集合类的代码,首先以既熟悉又陌生的HashMap开始. 签名(signature) public class HashMap<K,V> extends Abstract ...