自定义异步AsyncTask

原创 2016年05月30日 21:07:05

在 网络 的获取数据的过程中,多线程,异步 是很常见的方法,在这儿,我介绍一些处理办法

1,Thread
Thread的使用,一般结合 Handler的使用,
所以的操作,耗时操作,放在Thread里面进行,

2,AsyncTask

AsyncTask定义了三种泛型类型 Params,Progress和ResultParams 启动任务执行的输入参数,比如HTTP请求的URL。
Progress 后台任务执行的百分比。
Result 后台执行任务最终返回的结果,比如String.
doInBackground:必须重写,异步执行后台线程要完成的任务,耗时操作将在此方法中完成.

onPreExecute:执行后台耗时操作前被调用,通常用于进行初始化操作.

onPostExecute:当doInBackground方法完成后,系统将自动调用此方
法,并将doInBackground方法返回的值传入此方法.通过此方法进行UI的更新.

onProgressUpdate:当在doInBackground方法中调用publishProgress方法更新任务执行进度后,将调用此方法
.通过此方法我们可以知晓任务的完成进度.

这儿不做多介绍,AsyncTask的简单使用,我的其他博客有具体的介绍;

自定义的AsyncTask

public abstract class MyHttpAsyncTask<Params, Result>

        extends AsyncTask<Params, Void, Result> {

    Context context;
    /**
     * 传递上下文的使用。
     * @param context
     */
    public MyHttpAsyncTask(Context context) {
        this.context = context;
    }

    public final AsyncTask<Params, Void, Result> executeProxy(
            Params... params) {

        return null;
    }
}

NODO:
1,一定要传递上下文(Context)进来。
2,根据自己的需求,进行泛型操作。
3,下面的完整版,要使用final修饰。类似与Thread.start方法 由于final修饰,无法Override,方法重命名 省略掉网络判断

public abstract class MyHttpAsyncTask<Params, Result>

        extends AsyncTask<Params, Void, Result> {

    Context context;
    /**
     * 传递上下文的使用。
     * @param context
     */
    public MyHttpAsyncTask(Context context) {
        this.context = context;
    }

    public final AsyncTask<Params, Void, Result> executeProxy(
            Params... params) {
        if (NetUtil.checkNetWork(context)) {
            return super.execute(params);
        } else {
            PromptManager.showNoNetWork(context);
        }
        return null;
    }
}

使用,

 new MyHttpAsyncTask<String,List<NewInfo>>(this){


            @Override
            protected List<NewInfo> doInBackground(String... params) {
                newInfoList = newsNet.getNewsFromInternet();
                return newInfoList;
            }

            @Override
            protected void onPostExecute(List<NewInfo> newInfos) {
                list_news_item = newInfos;
                LogUtils.Logi("AnyscTask","xxxxx  ok  ok  ok");
                news_xiyan.setAdapter(new NewsListAdapter());
                super.onPostExecute(newInfos);
            }
        }.executeProxy("");

相关文章推荐

AsyncTask解析(下)——实现自定义AsyncTask网络传输工具类封装

在上文:AsyncTask深度解析(上)——原理分析与超简单demo实现中已经对AsyncTask的实现原理以及源码流程进行了一定的分析,相信大家已经基本熟悉了AsyncTask内部实现网络传输的调用...

spring @AYNC 标签支持异步

这里讲解一下Spring对异步事件机制的支持,实现方式有两种:   1、全局异步 即只要是触发事件都是以异步执行,具体配置(spring-config-register.xml)如下:   ...
  • xpsharp
  • xpsharp
  • 2014年08月14日 16:10
  • 5463

Android自定义圆形进度条,结合AsyncTask下载显示进度

效果图: 0.为了圆形进度条的扩展性,将部分属性定义在attrs.xml中,有利于定制化 ...

Android AsyncTask 深度理解、简单封装、任务队列分析、自定义线程池

前言:由于最近在做SDK的功能,需要设计线程池。看了很多资料不知道从何开始着手,突然发现了AsyncTask有对线程池的封装,so,就拿它开刀,本文将从AsyncTask的基本用法,到简单的封装,再到...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:自定义异步AsyncTask
举报原因:
原因补充:

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