我已经阅读过几条推文和评论,关于装载机坏了并使用它们是一种"射击自己"的好方法.commonsguy还宣布他将停止对他的图书馆的任何工作:Loaderex.Commonsguy还说"装载机是一个失败的抽象".
我显然在这里遗漏了一些东西,我想了解更多,并了解为什么装载机坏了,为什么要避免它们.
注意:我创建了一个Android应用程序(可能是中等复杂度),我使用Loaders并且没有任何加载器的麻烦.这就是为什么令我困惑的原因.
我还想了解其他更好的装载机替代品.提前致谢
Com*_*are 28
为什么装载机坏了,为什么要避免它们
你会注意到这不是我说的.我说加载器是一个失败的抽象.有区别.
在尝试创建重要的重用框架时,一般建议是设计和创建框架的三个独立实现.如果您的框架可以支持三种不同的方法,那么设计可能足够灵活,可以处理未来的实现.
该Loader框架在一天结束时围绕一个实现而设计:CursorLoader.期.LoaderSDK 中没有其他具体实现.特别是,该Loader框架有一个合同,要求实现Loader能够自动提供更新的结果.虽然这是从的角度来看一个可爱的合同用户的的Loader框架,它使为难那些谁可能创建实现了的Loader框架.
我尝试Loader为SQLite 创建两个单独的框架实现SharedPreferences(如果你分别计算Android的SQLCipher,则为三个).SQLite很糟糕,因为执行自动重装的唯一方法是Loader知道需要重新加载什么,这很笨重.将SharedPreferences一个用于工作,但有人指出,时下onLoadFinished()在表示结果(该对象将不会被调用Cursor的CursorLoader,SharedPreferences用于SharedPreferencesLoader)是同一个对象之前.这会中断SharedPreferencesLoader,因为在更改首选项时,SharedPreferences对象会在原位更新.
在编写了我的Loader实现并稍微使用它们之后,我得出结论认为它们不值得.我宁愿异步使用AsyncTask或者IntentService使用消息总线(Otto,greenrobot的EventBus等)来加载内容,以通知感兴趣的各方数据的变化.虽然我可以将这些东西包装在里面Loader,但我不相信它会解决足够的问题值得付出努力.
现在,如果您正在使用ContentProvider并希望使用CursorLoader,那很好.它可能有自己的问题,但至少它应该有效.
关于CWAC-LoaderEx库,我暂停它,因为:
我一天只有这么多小时,所以作为CWAC图书馆伟大的AAR化的一部分,我决定哪些图书馆值得努力维护
除了几本书之外,我不会亲自使用CWAC-LoaderEx
CWAC-LoaderEx依赖于太多的内部实现Loader让我感到舒服,我将能够长期保持它的工作(参见参考资料SharedPreferencesLoader)
CWAC-LoaderEx不会去任何地方,但我不会花更多的时间.如果有维护/扩展分叉的人联系我,我会很乐意从项目README链接到他们的分支.
我还想了解其他更好的装载机替代品
所有这些Loader都是异步加载内容,在检测到内容发生变化时重新加载该内容,并在配置更改中保留所述内容.保留的模型(或无头)片段可以做同样的事情,与一致AsyncTask.
| 归档时间: |
|
| 查看次数: |
1576 次 |
| 最近记录: |