AsyncTask函数化的封装,AsyncTask函数式的调用
来源:互联网 发布:用友nc java插件下载 编辑:程序博客网 时间:2024/06/05 09:12
AsyncTask在本专栏已经做过详细的解析,但是AsyncTask函数式的调用这个概念对大多数人来说比较陌生。其实本质就是自己封装AsyncTask,让暴露的方法,看不到一点AsyncTask的身影。
今天就讲讲对AsyncTask封装的过程。
新建一个AsyncTaskUtils类:
public class AsyncTaskUtils {public static <T> void doAsync(final IDataCallBack<T> callBack) {new AsyncTask<Void, Void, T>() {protected void onPreExecute() {callBack.onTaskBefore();};@Overrideprotected T doInBackground(Void... params) {// TODOreturn callBack.onTasking(params);}protected void onPostExecute(T result) {callBack.onTaskAfter(result);};}.execute();}}
在doAsync中匿名类的方式重写AsyncTask,然后要在对应的方法中使用接口回调的方式,把工具类里面的这三个功能传递出去(不同的模块进行传值,考虑使用接口回调)。调用接口中三个功能相同的方法(实际调用实现类的方法)。执行doInBackground返回值用泛型指定。
对应的接口如下:
public interface IDataCallBack<T> {/**任务执行之前*/void onTaskBefore();/**任务执行中...*/T onTasking(Void... params);/**任务执行之后*/void onTaskAfter(T result);}onTasking是对应doInBackground方法来的,因此要有返回值,使用泛型指定。
定义一个活动的基类BaseActivity:
public class BaseActivity extends Activity {public <T> void doAsync(IDataCallBack<T> callBack) {AsyncTaskUtils.doAsync(callBack);}}
在一个活动中,要想执行耗时操作。就可以继承自BaseActivity。例如下面,点击按钮执行访问网络。就重写doAsync。里面的接口实现方法,就类似xUtils工具类里面的HttpUtils的使用差不多。这样只需要关心
/**任务执行之前*/void onTaskBefore();/**任务执行中...*/T onTasking(Void... params);/**任务执行之后*/void onTaskAfter(T result);
三个实现类方法就好了。AsyncTask就通过函数调用的方式来完成了操作。
public class MainActivity extends BaseActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);findViewById(R.id.btn2).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {MainActivity.this.doAsync(new IDataCallBack<String>() {//该耗时操作,返回值类型是一个String类型@Overridepublic void onTaskBefore() {}@Overridepublic String onTasking(Void... params) {//耗时的具体操作String result = "";try {DefaultHttpClient httpClient = new DefaultHttpClient();HttpGet get = new HttpGet("http://www.baidu.com");HttpResponse response = httpClient.execute(get);if (response.getStatusLine().getStatusCode() == 200) {result = EntityUtils.toString(response.getEntity());}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}return result;}@Overridepublic void onTaskAfter(String result) {System.out.println(result);}});}}); }运行结果,发现可以正常使用~
AsyncTask函数化的封装,AsyncTask函数式的调用 就讲完了。
喜欢我的朋友可以关注我哦~
也可以扫描下方的二维码,或搜索公众号 Android程序员开发指南 去微信每日阅读一篇安卓开发文章。
长按上方二维码,关注本公众号一起交流Android开发技术。
0 0
- AsyncTask函数化的封装,AsyncTask函数式的调用
- 对Android中的AsyncTask进行函数化的封装,简洁调用
- 对Android中的AsyncTask进行函数化的封装,简洁调用
- Android中AsyncTask的函数调用顺序
- AsyncTask中各个函数详细的调用过程,初步实现异步任务
- 基于AsyncTask的线程池封装
- Android对于AsyncTask任务的封装
- Android 异步调用,AsyncTask的简单用法
- Android AsyncTask的onpostexecute没有被调用
- AsyncTask内的各个方法调用顺序:
- AsyncTask内的各个方法调用顺序
- AsyncTask内的各个方法调用顺序
- AsyncTask---详解Android中AsyncTask的使用
- 【AsyncTask】详解Android中AsyncTask的使用
- AsyncTask(一)AsyncTask的使用
- 对AsyncTask进行封装,简化繁琐的异步操作
- Android 简单的封装,可以更高效——AsyncTask
- 对AsyncTask进行封装,简化繁琐的异步操作
- PHP下载功能的实现和获得当前目录
- Java多线程(一)、多线程的基本概念和使用
- centos 163源
- java详解斐波那契数列
- C++学习日记
- AsyncTask函数化的封装,AsyncTask函数式的调用
- 51Nod 1082 与7无关的数
- 调整数组使奇数全部都位于偶数前面
- Postgresql 基础知识-1 数据库基础操作
- c高级之指针2
- 深度学习入门思考
- 石子归并
- springmvc 静态资源访问
- 几个php算法题-----其中有的还没搞明白