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. 积和式Permanent在Mathematica中的运算

    Permanent[m_List] := With[{v = Array[x, Length[m]]}, Coefficient[Times @@ (m.v), Times @@ v]] 参考资料:  ...

  2. Java序列化 如何把多个对象存储在一个文件中

    /** * 用于保存模板文件,内容包括: * 1,标志位,1 int * 2,版本   1 int * 3,数据头长度 1 int * 4,预留数据头空间  5120 byte * 5,后续数据长度  ...

  3. HDU 2121 Ice_cream’s world II 最小树形图

    这个题就是需要求整个有向带权图的最小树形图,没有指定根,那就需要加一个虚根 这个虚根到每个点的权值是总权值+1,然后就可以求了,如果求出来的权值大于等于二倍的总权值,就无解 有解的情况,还需要输出最根 ...

  4. JS注入操作页面对象

    在用selenium webdriver 编写web页面的自动化测试代码时,有时对页面对象的操作需要通过js语句去执行,selenium本身就支持执行js,我们在代码中import org.openq ...

  5. 【windows核心编程】 第六章 线程基础

    Windows核心编程 第六章 线程基础 欢迎转载 转载请注明出处:http://www.cnblogs.com/cuish/p/3145214.html 1. 线程的组成 ①    一个是线程的内核 ...

  6. linux 安装mongodb

    Linux 安装mongodb 1.下载mongodb linux wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-amazon- ...

  7. KNN算法java实现代码注释

    K近邻算法思想非常简单,总结起来就是根据某种距离度量检测未知数据与已知数据的距离,统计其中距离最近的k个已知数据的类别,以多数投票的形式确定未知数据的类别. 一直想自己实现knn的java实现,但限于 ...

  8. InetAddress

    InetAddress对域名进行解析是使用本地机器配置或者网络命名服务(如域名系统(Domain Name System,DNS)和网络信息服务(Network Information Service ...

  9. 二叉搜索树算法详解与Java实现

    二叉查找树可以递归地定义如下,二叉查找树或者是空二叉树,或者是满足下列性质的二叉树: (1)若它的左子树不为空,则其左子树上任意结点的关键字的值都小于根结点关键字的值. (2)若它的右子树不为空,则其 ...

  10. Java之泛型练习

    package cn.itcast.generics; import java.util.Comparator; import java.util.Iterator; import java.util ...