AsyncTask异步任务类的使用

原创 2016年05月31日 19:27:34

异步任务类的使用是为了,能够通过子线程加载数据,而在Ui线程刷新界面

下面通过一个例子具体讲解异步任务类的使用

1定义异步任务类,异步任务类必须继承AsyncTask

//三个参数的意义:第一个是启动任务执行的输入参数的类型,第二个参数是完成进度的值的类型,第三个是任务完成后返回结果的类型,这三个参数若不需要指定类型可写void

public classMyAsyncTask extends AsyncTask<URL, Integer, String>{

    ProgressDialogdialog;//进度条对话框

    int hasRead=0;//读取进度

    Contextcontext;

    int max;//进度的最大值

    private Results myResult;

    public MyAsyncTask(Contextcontext,intmax,Results result){

        this.context=context;

        this.max=max;

        this.myResult=result;

    }

    //后台线程执行的方法(相当于开启子线程加载数据),后台将要完成的任务执行的方法,调用publishProgress方法更新任务的执行进度

    @Override

    protected StringdoInBackground(URL... arg0) {

        StringBuilderbuilder=newStringBuilder();

        try {

            URLConnectionconn=arg0[0].openConnection();//创建网络连接对象

            BufferedReaderreader=newBufferedReader(newInputStreamReader(conn.getInputStream(),"UTF-8"));

            Stringline=null;

            while((line=reader.readLine())!=null){

                builder.append(line+"/n");

                hasRead++;

                publishProgress(hasRead);//通知进度刷新

            }

           

        }catch(IOException e) {

            e.printStackTrace();

        }

        return builder.toString();

    }

    //doinbackGround方法中调用publishProgress()方法更新进度后执行

    @Override

    protected voidonProgressUpdate(Integer... values) {

        super.onProgressUpdate(values);

        dialog.setMessage("已经读取了"+values+"");

        dialog.setProgress(values[0]);

    }

    //doinbackgroun执行完成后自动调用的方法,并将doinbackground的返回值传递给该方法

    @Override

    protected void onPostExecute(Stringresult) {

        super.onPostExecute(result);

        Toast.makeText(context, result, Toast.LENGTH_LONG).show();

        dialog.dismiss();

        myResult.getResult(result);

    }

    //该方法将在执行后台耗时操作前调用,用于准备工作,一般在doInbackground方法前执行

    @Override

    protected void onPreExecute() {

        super.onPreExecute();

        dialog=new ProgressDialog(context);

        dialog.setTitle("任务正在执行中");

        dialog.setMessage("任务正在执行中,请等待。。。。。");

        dialog.setCanceledOnTouchOutside(false);

        dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);//设置进度条对话框是水平显示进度的,STYLE_SPINNER是圆形的不能显示进度

        dialog.setMax(max);//设置进度的最大值

        dialog.setIndeterminate(false);//设置进度条是否显示进度

        dialog.show();

    }

   

//获取数据后的回调接口

    public interface Results{

        void getResult(Stringresult);

    }

}

2.定义异步任务类的实现类的实例,可通过方法启动异步任务类

num= (TextView) findViewById(R.id.num);

        num.setOnClickListener(new View.OnClickListener(){

           

            @Override

            public void onClick(View arg0) {

//定义异步任务类,必须定义在ui线程中,

MyAsyncTask task=newMyAsyncTask(MainActivity.this, 1,newMyAsyncTask.Results() {  

                    @Override

                    public void getResult(Stringresult) {

                        num.setText(result);

                    }

                });

        try {

                    task.execute(new URL("http://www.weather.com.cn/data/cityinfo/101010100.html"));//通过该方法让异步任务类执行耗时操作,必须在ui线程中执行,有多个重载方法

                }catch(MalformedURLException e) {

                    e.printStackTrace();

                }

            }

        });

java.io.EOFException异常:http://blog.csdn.net/jiuweitianhu_12345/article/details/52469127

例子:https://yunpan.cn/cMCm3IH5ErYjj (提取码:ef66)

版权声明:本文为博主原创文章,未经博主允许不得转载。

AsyncTask异步任务类

AsyncTask异步任务类,比Handle更轻量级,更适合简单的异步操作。内部封装了Handle,在使用AsyncTask类进行刷新控件的刷新操作时,不用再额外创建声明Handle,可以直接使Asy...
  • littlewhitetree
  • littlewhitetree
  • 2016年07月18日 20:49
  • 1080

安卓异步任务类AsyncTask——突出一个简单、好用

前言:AsyncTask是android提供的轻量级异步任务类(代码轻量级,系统资源占用并不是轻量级!),完整的封装了异步任务流程,这让我想起了Handler异步任务通信机制。两者对比起来,Async...
  • JerryCQU
  • JerryCQU
  • 2015年10月23日 09:38
  • 1180

Android之AsyncTask异步任务

1      AsyncTask异步任务 1.1    ANR的概念          Application Not Responding,应用程序无响应          Android系统...
  • JourneyX
  • JourneyX
  • 2016年10月30日 10:04
  • 1101

Android之AsyncTask异步任务——防止内存泄露

Android的异步任务有很多实现方法,最常见的如Handler、Thread、AsyncTask;还有一些开源项目也可以做到异步任务和线程间通信等功能,例如:EventBus、RxAndroid等,...
  • zsf442553199
  • zsf442553199
  • 2016年07月25日 11:20
  • 557

Android AsyncTask 基本用法,参数和步骤理解,开启异步任务之旅

介绍: AsyncTask 可以使得我们能够轻松在 UI 线程控制后台操作和后台操作所返回结果,无需使用 Thread 和 Handler 这样的组合。 实际上 AsyncTask 是为我们所设计...
  • astro_Gypsophila
  • astro_Gypsophila
  • 2017年01月06日 01:00
  • 574

android中异步任务AsyncTask的应用和工作原理

android4.0之后,android不允许在UI线程(主线程)中运行其他耗时线程,如网络请求的线程,否则就会崩溃抛出NetWorkOnMainThreadException 而且将耗时线程放入主线...
  • yxb_yingu
  • yxb_yingu
  • 2016年05月31日 18:55
  • 1206

Android中AsyncTask(异步任务)和Handler(线程消息机制)的详解

AsyncTask生来就是处理一些后台的比较耗时的任务,给用户带来良好用户体验的,从编程的语法上显得优雅了许多,不再需要子线程和Handler就可以完成异步操作并且刷新用户界面。Android官网总结...
  • qq_22118507
  • qq_22118507
  • 2016年05月18日 10:16
  • 1244

kotlin 之 Android AsyncTask

kotlin 成为Android 的新宠,在此处简单介绍一下 AsyncTask : 首先写一个类继承 AysyncTask: package com.example.administra...
  • duke_knight
  • duke_knight
  • 2017年06月07日 15:07
  • 541

Android中的线程池和AsyncTask异步任务(一)

前言:线程池和AsyncTask是我们在多线程并发中经常会使用到的,那么到底它们是怎样工作的呢?又有什么区别呢?该如何选择呢?下面让我们一起来探讨。不恰当的地方还请指教!注:原创,转载请注明出处。一、...
  • sinat_34596644
  • sinat_34596644
  • 2016年04月10日 13:13
  • 1186

AsyncTask异步任务类使用

优点:封装了handler+thread+线程池 特点:1、android中已经写好了的多线程             2、处理UI Thread和worker           代码示例:   ...
  • u013519084
  • u013519084
  • 2016年07月06日 10:10
  • 484
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:AsyncTask异步任务类的使用
举报原因:
原因补充:

(最多只允许输入30个字)