异步加载机制-----Loader

    除了Asynctask用于异步加载之外,我们也经常使用Loader进行异步加载,使用它有个好处,我们当数据源进行更新的时候,Loader可以动态的监听改变,
    并且配置改变的时候,会自动重连,省掉很多的功夫。
    Loader 存在于Fragment和Activity中,下面我们来说一下它的使用。
    **LoaderManager**用于管理Loader,可以在Fragemnt和Activity中通过getLoaderManager获取对象实例。
    初始化Loader有两种方式,一种是通过初始化的方式----initLoader(id,args,Callback);另一种方式则是通过重新打开的方式----
    restartLoader(id,args,Callback);
    Loader一般我们经常使用的是它的两个子类,CursorLoader和AsyncTaskLoader.
    CursorLoader用于加载contentProvider里面提供的数据,可以实现动态监听。
    AsyncTaskLoader则是用于异步任务的加载。
    首先说一下initLoader(id,args,Callback):
       id代表当前Loader的标识,虽然一个Fragment或者Activity中只存在一个LoaderManager,但是可以存在多个Loader,此id用于标识不同的Loader;
       args则是传递给Loader的Bundle类型的参数。
       CallBack则是一个回调,签名的参数则是由它的oncreate(int id,Bundle args)中的两个参数所体现。
    下面说一下回调,
        onCreate()  --  创建一个Loader并且返回给LoaderManager(一般使用CursorLoader)
        onLoaderFinished() -- Loader加载完成以后调用 ,返回结果
        onLoaderReset() -- Loader重置以后,不加载数据
 代码示例:
       //1.获取到LoaderManager ,用来管理Loader
        LoaderManager manager = getLoaderManager();
        //2.初始化Loader
        manager.initLoader(
                1,  //id Loader的唯一表示
                null,  // args  需要传递给Loader的参数
                new LoaderManager.LoaderCallbacks<Cursor>() { // 一个回调

                    //用来创建一个Loader, 返回给LoaderManager,用来才处理异步加载
                    @Override
                    public android.content.Loader<Cursor> onCreateLoader(int id, Bundle args) {
                        //这里使用CursorLoader
                        Uri uri = Uri.parse("content://com.ly.loader_provider/girls");
                        return new CursorLoader(MainActivity.this,
                                uri,
                                null,
                                null,
                                null,
                                null);
                    }

                    //当处理完数据之后,会通过这个方法,将结果回调过来
                    @Override
                    public void onLoadFinished(android.content.Loader<Cursor> loader, Cursor data) {
                        //将结果给适配器,从而显示在ListView上面
                        adapter.swapCursor(data);
                    }
                    //表示Loader重置啦,不再显示数据
                    @Override
                    public void onLoaderReset(android.content.Loader<Cursor> loader) {
                            adapter.swapCursor(null);
                    }
                });
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值