自定义异步AsyncTask

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

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("");

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值