设为首页 加入收藏

TOP

我理解的Android加载器
2014-11-24 02:48:13 来源: 作者: 【 】 浏览:1
Tags:理解 Android 加载

首先Activity是我们的前端页面展现,数据库是我们的数据持久化地址,那么正常的逻辑就是在展示页面的渲染页面的阶段进行数据库查询。拿到数据以后才展示页面。


但是这个逻辑有一些缺点:



首先是查询数据的逻辑放在了UI生成的同个线程中,这个就意味着在查询数据的时候,UI页面生成的工作被阻塞住了。UI一旦被阻塞用户就会被感知出来了,因此就会出现各种无相应页面(Application Not Response),或者activity页面延迟的现象,这对用户体验来说是不可接受的。


其次是在渲染页面的时候需要固定需要进行一次数据查询,但是这个是很不节省资源的。假如一个Activity从一个停止状态回到前台,那么这个时候尽管数据并没有变化,但是也需要进行一次query操作。在浪费资源的同时也再次增加了页面渲染失败的风险。


还有就是当数据变化的时候如何通知页面进行修改呢?这个时候往往就又要创建一个monitor的角色,来当数据源变化的时候来让页面重新调用requery。



因此在Android的越来越提倡用户体验的今天,加载器和加载管理器(Loader,LoaderManager)就出现了。


简单来说,Loader做了下面两个事情:



而LoaderManager就是加载器的管理器,一个LoaderManager可以管理一个或多个Loader,一个Activity或者Fragment只能有一个LoadManager。LoaderManager管理Loader的初始化,重启和销毁操作。


从官网http://developer.android.com/reference/android/app/LoaderManager.html就可以看出它包含的方法有:


对应的就是这几个操作。



initLoader是初始化一个加载器,它的第三个参数是一个LoaderCallbacks接口,LoaderManager的initLoader是不做任何事情的,它只绑定了一个LoaderCallbacks,具体的创建Loader的事情是由这个callback来做的。


LoaderCallbacks接口需要实现的三个方法:


在loader创建loader的时候会调用onCreateLoader,然后当load数据结束的时候(第一次读取数据或者数据有改变的时候load数据)会调用onLoadFinished,而onLoaderReset只有在destory一个loader的时候才有可能调用。



所以一般创建数据Cursor(CursorLoader)的工作是在onCreateLoader中做,将CursorLoader返回,这样就创建了对这个数据源的监控,当数据源有数据变化的时候,就会自动调用了onLoadFinished函数了。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Android开发切换host应用 下一篇Android基础总结篇之一:Activity..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: