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 中的几个方法(其中doInBackground()是 必须要实现的):public class MyAnsy extends AsyncTask{ //...
  • ygd1994
  • ygd1994
  • 2016年05月03日 13:24
  • 259

AsyncTask异步任务类使用

优点:封装了handler+thread+线程池 特点:1、android中已经写好了的多线程             2、处理UI Thread和worker           代码示例:   ...

Android异步任务处理之AsyncTask异步操作类的使用方法1(不含onCancelled部分)

 创建一个新工程LearnAsyncTask,一个空Activity,上面放置几个控件 控件 属性 ...

使用AsyncTask异步任务下载数据

1.使用异步任务的原因: ①.android 4.0开始主线程不能执行耗时任务(网络连接,数据库访问,文件的读取)。 不能在主线程执行的原因: android的主线程也叫UI线程,专门响应用户的...

AsyncTask 异步任务基本使用--下载视频

转载请注明出处:http://blog.csdn.net/vnanyesheshou/article/details/73613706 本文已授权微信公众号 fanfan程序媛 独家发布 扫一扫...

使用AsyncTask做异步任务以及BaseAdapter的getview方法的逻辑问题

昨天开始调试一个BUG,从早上调到下班,都没有发现错误在哪里。。晚上再继续,跟朋友讨论了很久,开始有点思路。。最开始以为是异步更新UI出现问题,但是经过修改代码测试,问题依然存在。。最后发现的问题却令...
  • DJCKEN
  • DJCKEN
  • 2012年06月13日 11:34
  • 2755

Android之线程使用AsyncTask异步任务(二)

下载时增加刻度(进度条)
  • ly_rose
  • ly_rose
  • 2015年12月13日 14:56
  • 198

AsyncTask异步任务使用详解

异步任务类AsyncTask> public class Like_ListTask extends AsyncTask> { private Context context; /...

Android之线程使用AsyncTask异步任务(一)

线程使用AsyncTask异步任务
  • ly_rose
  • ly_rose
  • 2015年12月12日 22:23
  • 288
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:AsyncTask异步任务类的使用
举报原因:
原因补充:

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