AsyncTask应用笔记

1.什么时候用到AsyncTask?

  当我们需要联网做一些耗时,而且我们还要使用这个耗时操作返回的所有数据,这事最好使用AsyncTask异步加载,操作完成后使用其返回的数据,避免并发访问异常或使用了还没有返回完的数据造成空指针异常

2.使用

class ResultAsyncTask extends AsyncTask<String, Void, String> {

        private List<String> urlData;

        @Override
        protected String doInBackground(String... params) {
            // TODO Auto-generated method stub
            return new ResultHttpUtils().getJsonParams(params[0]);
        }

        @Override
        protected void onPostExecute(String result) {
            // TODO Auto-generated method stub
            super.onPostExecute(result);
            Log.i(TAG, result + "======");
            try {
                urlData = new ArrayList<String>();
                JSONObject jsonObject = new JSONObject(result);
                int statusCode = jsonObject.getInt("status");
                Log.i(TAG, "----------------" + statusCode);
                if (statusCode == 3001) {
                    showTipDialog();
                    return;
                }
                String url = jsonObject.getString("cdn_domain");
                JSONArray urlFiles = jsonObject.getJSONArray("data");
                for (int i = 0; i < urlFiles.length(); i++) {
                    // JSONObject object = urlFiles.getJSONObject(i);
                    String urlFile = urlFiles.getString(i);
                    urlData.add(url + urlFile);
                }
                Log.i(TAG, "图片路径--------------------" + urlData);
                new GetBitmapAsyncTask().execute(urlData);
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }执行: new ResultAsyncTask().execute(String类型);

class ResultAsyncTask extends AsyncTask<String(1), Void(2), String(3)>(1)代表的是 new ResultAsyncTask().execute(可变数组);在执行的时候传入的参数类型,传入的参数是可变的,根据传入的类型,来定义什么类型,例如传入的是String类型,此处是String类型,传入的是一个list集合,此处就是List<>;(2)这个参数和进度条的更新用到的数据,一般我们不考虑(3)这个数据是返回数据的类型,比如返回数据是一个List集合,此处就是List<>;
doInBackground(String... params) 里面接收的是参数是可变数组,我们想要拿到传进来的数据就要使用到角标,比如获取第一个传进来的数据params[0],如果传进来的是一个list那么params[0]==list(这里指的是连个数据完全相同)执行完后会返回一个result,这个result会进入onPostExecute(String result)的参数里面
onPostExecute(String result)里面的result就是耗时操作完成后返回的数据,如果想使用这个数据可以直接在onPostExecute(String result)这个方法中进行
 

 
时间: 2024-07-31 17:06:19

AsyncTask应用笔记的相关文章

Android之AsyncTask学习笔记

AsyncTask就是一个封装过的后台任务类,顾名思义就是异步任务. AsyncTask直接继承于Object类,位置为android.os.AsyncTask.要使用AsyncTask工作要提供三个泛型参数,并重载几个方法(至少重载一个). AsyncTask定义了三种泛型类型 Params,Progress和Result. Params 启动任务执行的输入参数,比如HTTP请求的URL. Progress 后台任务执行的百分比. Result 后台执行任务最终返回的结果,比如String.

【转】 Pro Android学习笔记(七四):HTTP服务(8):使用后台线程AsyncTask

目录(?)[-] 5秒超时异常 AsyncTask 实现AsyncTask抽象类 对AsyncTask的调用 在哪里运行 其他重要method 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件,转载须注明出处:http://blog.csdn.net/flowingflying/ 之前,我们直接在activity中执行http通信,在通信过程中可能会出现连接超时.socket超时等情况,超时阈值一般是秒级,例如AndroidHttpClient中设置的20秒,如果出现超时,就

AsyncTask基础(笔记)

安卓异步任务 ---AsyncTask 为什么要异步任务: 1.Android单线程模型 2.耗时操作放在非主线程中执行 AsyncTask为何而生 1.子线程中更新UI 2.封装,简化异步操作 构造AsyncTask子类的参数 AsyncTask<Params, Progress, Result>是一个抽象类,通常用于被继承,继承AsyncTask需要指定如下三个泛型参数: Params: 启动任务时输入的参数的类型,也就是execute()方法中,传入的参数 Progress: 后台任务执

Android笔记二十六.Android异步任务处理(AsyncTask)

转载请表明出处:http://blog.csdn.net/u012637501(嵌入式_小J的天空) 一.引言 我们知道Android的UI线程主要负责处理用户的按键事件.用户触屏事件及屏幕绘图事件等,对于其他的操作尽量不要在UI线程中实现,因为这些操作很有可能会阻塞UI线程,比如一些耗时操作,会导致UI界面停止响应,从而降低了用户的体验.所以,为了避免UI线程失去响应的问题,Android建议将耗时操作放在新线程中完成,但新线程也可能需要动态更新UI组件:比如需要从网上获取一个网页,然后在Te

Android学习笔记:进度条ProgressBar的使用以及与AsyncTask的配合使用

ProgressBar时android用于显示进度的组件.当执行一个比较耗时的操作(如io操作.网络操作等),为了避免界面没有变化让用户体验降低,提供一个进度条可以让用户知道程序还在运行. 一.ProgressBar有如下几种常见样式 1.默认进度条的样式为圆圈(为中等大小的圆圈) <ProgressBar android:layout_width="wrap_content" android:layout_height="wrap_content" />

【安卓笔记】AsyncTask源码剖析

前言: 初学AsyncTask时,就想研究下它的实现源码,怎奈源码看了好几遍都没看懂,于是搁置了.最近心血来潮,又看了一些源码,如HandlerThread,IntentService,AsyncQueryHandler等,收获颇深,于是乎想回头再研究下AsyncTask,没想到这次居然很容易看懂了... 正文: 注:1.读者阅读本文前,必须对android的Handler机制以及j.u.c中的线程池有所了解;2.AsyncTask使用方式不再赘述.3.不同版本AsyncTask内容有些不同.

Android学习笔记:利用httpclient和AsyncTask 发起网络http post操作

1.在android4中,发起网络http操作,不能在Activity的事件(即主线程)中进行,必须在单独的线程中操作. 另外进行网络操作,需要在manifest文件中增加如下的权限: <uses-permission android:name="android.permission.INTERNET" /> 2.下面给出代码事例 public void loadData() { new AsyncTask<String, Void, String>() { @

android笔记--AsyncTask例子

代码: package com.test.handler; import com.test.demo.R; import android.app.Activity; import android.app.ProgressDialog; import android.os.AsyncTask; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.widget

Android学习笔记(三二):线程:后台异步任务AsyncTask

去五金店买个钻,不是因为我们需要钻,我们只需需要孔,既然五金店无法买孔,退而求其次,买打孔的工具.同样的对于后台线程,我们真正需要的是能够在UI主线程外进行处理,Android提供一个让程序员编写后台操作更为容易和透明AsyncTask. 使用AsyncTask,需要创建AsyncTask的资料,并实现其中的抽象方法以及重写某些方法.利用AsyncTask我们不需要自己来写后台线程,无需终结后台线程,例如stop()的方式.AsyncTask的方式对无限循环的方式并不太合适,可能更合适使用Run