谈谈AsyncTask类
来源:互联网 发布:java实现远程桌面监控 编辑:程序博客网 时间:2024/05/22 04:25
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;}@Overridepublic void onCancelled() {//logicfailMsg();super.onCancelled();}@Overridepublic void onPreExecute() {String title = "";String message = mActivity.getString(mLoadingMsg);mProgressDialog = ProgressDialog.show(mActivity, title, message, true, true, new OnCancelListener(){@Overridepublic void onCancel(DialogInterface dialogInterface) {LoadingDialog.this.cancel(true);}});super.onPreExecute();}@Overridepublic abstract Result doInBackground(Input... params);@Overridepublic void onPostExecute(Result result) {super.onPostExecute(result);mProgressDialog.dismiss();if(result != null){doStuffWithResult(result);} else {//logicfailMsg();}}protected void failMsg(){Toast.makeText(mActivity, mFailMsg, 2000).show();}public abstract void doStuffWithResult(Result result);@Overrideprotected 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中创建
2) execute方法必须在UI thread中调用
3) 不要手动的调用onPreExecute(), onPostExecute(Result),doInBackground(Params...), onProgressUpdate(Progress...)这几个方法
4) 该task只能被执行一次,否则多次调用时将会出现异常
- 谈谈AsyncTask类
- 让我们一起谈谈AsyncTask
- 一个例子谈谈AsyncTask的用法
- AsyncTask类
- AsyncTask类
- AsyncTask源码终极完全解析----结合Android线程池谈谈AsyncTask任务个数和线程的最大数量问题
- AsyncTask类的使用
- Android.os.AsyncTask类
- android的类AsyncTask
- Android AsyncTask类
- AsyncTask类的使用
- Android类AsyncTask用法
- Android AsyncTask类
- android的AsyncTask类
- android异步类AsyncTask
- android AsyncTask类
- android 异步类 AsyncTask
- AsyncTask类(Android)
- adapt模式
- xml与java对象的相互转换
- SSH(Spring+Struts+Hibernate)学习笔记(二)Struts概览与MVC简述
- 使用GDB进行调试
- spring 3.x关于profile的一些事
- 谈谈AsyncTask类
- android 面试总结十条
- Android SQLite Database and ContentProvider - Tutorial
- CRT---Visual C++ C RunTime Lib
- 用于验证码图片识别的类(C#源码)
- 数据结构(C语言)实现循环队列
- android 网络详解
- HTML5 地理位置和本地存储
- 数据结构实现链式队列(C语言)