android后台任务(三):Loader
来源:互联网 发布:淘宝联盟使用红包 编辑:程序博客网 时间:2024/06/08 12:04
Loader也是android运行后台任务的方法之一,并且是谷歌推荐的,可以使用CursorLoader,也可以自定义Loader来实现异步任务,下面是使用方法。
一、编写一个自定义Loader继承自AsyncTaskLoader
//我是在Activity内部编写,所以是静态内部类 private static class MyLoader extends android.support.v4.content.AsyncTaskLoader<String> { private String result; public MyLoader(Context context) { super(context); } //判断是否已经有结果了,如果有,调用deliverResult(result),会直接回调onLoadFinished(),将result作为data传入。 @Override protected void onStartLoading() { super.onStartLoading(); if (result != null) { deliverResult(result); } else { forceLoad(); } } //这里写任务执行的代码,会在工作线程执行 @Override public String loadInBackground() { //模拟延迟5秒 try { Thread.sleep(5000); }catch (Exception e) { } result = "这是查询结果"; return result; } }
二、让需要使用Loader的Activity或者Fragment实现LoaderManager.LoaderCallbacks接口,复写三个回调函数,可以自定义任务结果的返回类型,这里是String。
public class Test2 extends AppCompatActivity implements LoaderManager.LoaderCallbacks<String>{ //这个方法会在后台任务初始化完成之后调用 //需要让他返回一个Loader实例,而Loader实例定义了后台任务 @Override public Loader<String> onCreateLoader(int id, Bundle args) { return new MyLoader(this); } //这个函数将在后台任务完成之后被调用,并且传入结果data //可以在这里更新UI @Override public void onLoadFinished(Loader<String> loader, String data) { tv.setText(data); } @Override public void onLoaderReset(Loader<String> loader) { }}
三、在需要开始执行后台任务的地方执行initLoader
getSupportLoaderManager().initLoader(1,null,this);
这是在Activity当中,Fragment中是
getLoaderManager().initLoader(URL_LOADER, null, this);
整个的执行过程是这样:
一、initLoader
二、调用onCreateLoader(),获得Loader实例
三、执行完Loader中的任务
四、调用onLoadFinished()
Loader的实现使用Asynctask,而Asynctask的实现使用Handler+Looper+Thread。
0 0
- android后台任务(三):Loader
- Android 后台任务(四)Loader
- Android 后台任务(三)AsyncTask
- Android学习笔记(三二):线程:后台异步任务AsyncTask
- Android学习笔记(三二):线程:后台异步任务AsyncTask
- Android学习笔记(三二):线程:后台异步任务AsyncTask
- Android Priority Job Queue (Job Manager):后台线程任务结果传回前台(三)
- Android Priority Job Queue (Job Manager):后台线程任务结果传回前台(三)
- Android 后台任务(一)概述
- Android 后台任务(五)Service
- Android 后台任务(六)IntentService
- Android 后台任务(八)内存泄露
- Android 后台任务(七)内存泄露
- android后台任务(一):Handler
- android后台任务(二):IntentService
- android后台任务处理
- Android Loaders(三)实现一个Base Loader
- Android Universal Image Loader 源码分析(三)
- MySQL:MySQL日期数据类型、MySQL时间类型使用总结
- 操作系统引导的学习
- 自定义view简单例子
- IOS总结_实现UIButton的图文混排(二)
- 鲜为人知的前端知识
- android后台任务(三):Loader
- iOS应用内置付费 IAP Store Kit Guide翻译
- 自定义ViewGroup+ViewDragHelper —— 侧滑菜单
- 杂论--生命之意
- mysql之权限管理
- 二维码扫描(待总结)
- code vs [网络流24题]最小路径覆盖问题
- 开灯问题
- Boost智能指针——shared_ptr