谈谈AsyncTask类
AsyncTask是AndroidSDK自带一个异步加载数据类,今天为大家介绍一个实用模板工具类; AsyncTask<Params,Progress,Result>,第一个参数是传入参数,比如url,自定义类,SQLite数据;第二个参数是处理过程有数据更新时用到的参数,比如,自定义异常,进度条更新数据;第三个参数是返回结果; 怎么使用AsyncTask为程序取得最快效率,一般我们都是写一个类继承该类,但这样使用却没有尽其功能,也使程序没有得到完善处理,在Android中,经常会使用ProgressDialog来处理加载大量数据,此时使用AsyncTask来封闭此类,必然会使程序简洁很多,ex:
public abstract class LoadingDialog<Input,Result> extends AsyncTask<Input,WSError,Result>{ private ProgressDialog mProgressDialog; protected Activity mActivity; private int mLoadingMsg; private int mFailMsg; public LoadingDialog(Activity activity,int loadingMsg,int failMsg){ this.mActivity = activity; this.mLoadingMsg = loadingMsg; this.mFailMsg = failMsg; } @Override public void onCancelled() { //logic failMsg(); super.onCancelled(); } @Override public void onPreExecute() { String title = ""; String message = mActivity.getString(mLoadingMsg); mProgressDialog = ProgressDialog.show(mActivity,title,message,true,new OnCancelListener(){ @Override public void onCancel(DialogInterface dialogInterface) { LoadingDialog.this.cancel(true); } }); super.onPreExecute(); } @Override public abstract Result doInBackground(Input... params); @Override public void onPostExecute(Result result) { super.onPostExecute(result); mProgressDialog.dismiss(); if(result != null){ doStuffWithResult(result); } else { //logic failMsg(); } } protected void failMsg(){ Toast.makeText(mActivity,mFailMsg,2000).show(); } public abstract void doStuffWithResult(Result result); @Override protected void onProgressUpdate(WSError... values) { Toast.makeText(mActivity,values[0].getMessage(),Toast.LENGTH_LONG).show(); this.cancel(true); mProgressDialog.dismiss(); super.onProgressUpdate(values); } public void doCancel() { mProgressDialog.dismiss(); } }当我们需要定义一个加载Dialog时,继承该类,传入参数Input,结果参数Result,将后台运行代码放入doInBackground()中,结果处理在doStuffWithResult()中,此时,无论加载任何数据都可以。当需要在外部处理异常时,使用AsyncTask.publisProgress(WSError... values)即可。当有数据同时加载多时,为避免程序挂掉,在AsyncTask启动后,会有三种状态,分别是PENDING(离线,没有执行),RUNNING(运行中),FINISH(加载完成),我们即可使用这三种状态分别进行对应处理。 使用时需要注意: 1) Task的实例必须在UI thread中创建 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |