LoaderManager 的作用域是啥?
Posted
技术标签:
【中文标题】LoaderManager 的作用域是啥?【英文标题】:What is the scope of LoaderManager?LoaderManager 的作用域是什么? 【发布时间】:2012-01-27 16:14:36 【问题描述】:使用 Loaders 创建 android 应用程序时,每个 Activity 和 Fragment 是否应该有自己的LoaderManager
?还是应该只有一个LoaderManager
应用程序拥有?最后,用于识别特定LoaderManager
s 的“唯一 ID”在课堂之外是否可见?
具体来说,我无法确定我的应用程序中的哪些类应该实现LoaderCallback<Cursor>
方法(即每个片段应该实现这些回调,还是应该让一个片段实现回调并查询结果,将它们发送给其他片段必要的片段/活动)?
提前感谢任何可以帮助我的人!我在网上找不到太多关于此的信息。
【问题讨论】:
好问题,感谢您的信息! 我同意...非常感谢! 【参考方案1】:LoaderManger
由活动管理和拥有。您可以在您的片段或活动中创建实际的加载器,它们将由相同的LoaderManager
管理。唯一 ID 用于识别您在同一活动中可能拥有的不同加载程序。例如 ID=0 -> FooLoader、ID=1 -> BarLoader 等
【讨论】:
感谢尼古拉的帮助! 嘿 Nikolay,不确定你是否会看到这个……但有一个问题。如果Fragment
s 旨在为重复使用而设计(即您不想为单个特定父级Activity
设计Fragment
),这是否意味着您不想拥有特定的@ 987654326@ 负责管理Loader
中的Fragment
?在Fragment
中管理Loader
s 是不是更好的做法,以便它们可以在应用程序的生命周期中附加到多个Activity
s?
Activity
并不真正关心实际的加载器,只是确保它们被正确地创建、初始化等。您应该在实际使用数据的地方实现LoaderCallback<?>
。很可能是您的Fragment
课程。
你不能真正改变LoaderManager
,只能改变加载器。如果您使它们独立于特定的片段/活动,您可以重用加载器。您不应该将东西分配给应用程序上下文,因为这意味着它永远不会被 GC-ed(只要您的进程还活着)。
这是否意味着您应该有一个全局 ID 管理器来保存所有加载程序,因为片段的多个实例可以用于多个/单个活动?以上是关于LoaderManager 的作用域是啥?的主要内容,如果未能解决你的问题,请参考以下文章