如何从managedQuery过渡到LoaderManager/CursorLoader?

我正在开发一个针对API级别8(2.2,Froyo)的Android应用程序。我正在使用一个,这很简单,我正在用于填写我的列表视图,但是我注意到在SimpleCursorAdapter的文档中,无标志构造函数已被弃用,并带有以下注释:ContentProviderSimpleCursorAdapter

此构造函数已弃用。不建议使用此选项,因为它会导致在应用程序的 UI 线程上执行 Cursor 查询,从而导致响应能力差甚至应用程序无响应错误。作为替代方法,将 LoaderManager 与 CursorLoader 一起使用。

由于我的目标是 API 级别 8,因此 a 不绑定到 .兼容性包中的类执行此操作,但我没有使用片段。LoaderManagerActivityFragmentActivity

我的问题是:我应该如何在针对11年之前的API级别的应用程序中使用?我是被迫过渡到片段,还是应该恢复到已弃用的构造函数(但要使用一个来保持UI线程友好,这是应该做的)?LoaderManager/CursorLoaderSimpleCursorAdapterAsyncTaskCursorLoader


答案 1

编辑:

我已经在这篇博客文章中写了相当广泛的内容。检查一下,让我知道它是否有帮助!:)LoaderManager


原文:

绝对,绝对,绝对与.该类卸载在线程上加载数据的工作,并在短期活动刷新事件(如方向更改)期间保持数据持久性。除了执行初始查询之外,它还会将 a 注册到您请求的数据集,并在数据集更改时调用自身,从而自动更新。这非常方便,因为您不必担心自己执行查询。当然,可以利用 它来保持应用程序UI线程友好,但它将涉及更多的代码...实现你的类,以便它将,例如,保留加载的over将不简单。最重要的是,它将自动为您执行此操作,并负责根据生命周期正确创建和关闭。LoaderManagerCursorLoaderCursorLoaderContentObserverforceLoad()AsyncTaskCursorActivityLoaderManager/LoaderCursorActivity

若要在面向 11 之前的 API 级别的应用中使用,只需使用兼容性包中的类即可。A 只是一个,是为 Android 兼容性支持而创建的,不需要在应用程序中使用 s。只需使用而不是,您应该全部设置。当然,您可以为每个屏幕实现一个父级,并让它在 a 中显示其布局(通过在 Activity 的方法中使用)。如果您决定针对平板电脑优化应用程序,此设计可能会使向多窗格布局的过渡更加容易。:),这是一次很好的学习经历。LoaderManager/CursorLoaderFragmentActivityFragmentActivityActivityFragmentgetSupportLoaderManager()getLoaderManager()FragmentActivityFragmentFragmentActivity.getSupportFragmentManager()onCreate()

这也是一个非常好的教程。尝试以自己的方式完成它,如果您有任何其他问题,请不要犹豫,发表评论。


答案 2

推荐