您的位置:首页 > 其它

自定义异步AsyncTask

2016-05-30 21:07 423 查看
在 网络 的获取数据的过程中,多线程,异步 是很常见的方法,在这儿,我介绍一些处理办法

1,Thread

Thread的使用,一般结合 Handler的使用,

所以的操作,耗时操作,放在Thread里面进行,

2,AsyncTask

AsyncTask定义了三种泛型类型 Params,Progress和Result。
Params 启动任务执行的输入参数,比如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