如何从managedQuery转换到LoaderManager / CursorLoader?

我正在开发一个针对API级别8(2.2,Froyo)的Android应用程序。 我正在使用一个ContentProvider ,这很简单,我使用SimpleCursorAdapter来填写我的列表视图,但我注意到在SimpleCursorAdapter的文档中,无标签的构造函数是不赞成使用下面的注释:

这个构造函数已经被弃用了。 这个选项是不鼓励的,因为它会导致在应用程序的UI线程上执行游标查询,因此可能导致响应不佳,甚至导致应用程序不响应错误。 作为替代,使用带有CursorLoader的LoaderManager。

由于我的目标是API级别8,因此LoaderManager不绑定到Activity 。 兼容性包中的FragmentActivity类执行此操作,但我没有使用Fragments。

我的问题是:我应该如何在一个应用程序中使用LoaderManager/CursorLoader来达到11级以前的API级别? 我强迫过渡到片段,或者我应该回到弃用的SimpleCursorAdapter构造函数(但使用AsyncTask保持UI线程友好,这是CursorLoader应该这样做)?

Solutions Collecting From Web of "如何从managedQuery转换到LoaderManager / CursorLoader?"

编辑:

我在这篇博客文章中写了相当广泛的LoaderManager 。 检查出来,让我知道如果它的帮助! 🙂


原文:

绝对肯定的,一定要用LoaderManagerCursorLoader类卸载线程中加载数据的工作,并在短期活动刷新事件(如方向更改)期间保持数据持久性。 除了执行初始查询之外, CursorLoader ContentObserverContentObserver注册您请求的数据集,并在数据集更改时自动调用forceLoad() ,从而自动更新。 这非常方便,因为您不必担心自己执行查询。 当然,可以使用AsyncTask来保持你的应用程序UI线程友好,但是它会涉及到更多的代码…并且实现你的类,例如,它将会保留加载的Cursor over Activity很简单。 最重要的是, LoaderManager/Loader会自动为你做这件事,并且根据Activity生命周期来照顾正确地创build和closuresCursor

要在定位于11之前的API级别的应用程序中使用LoaderManager/CursorLoader ,只需使用兼容性包中的FragmentActivity类即可。 FragmentActivity只是一个Activity ,并且已经为Android兼容性支持而创build,并且不需要在应用程序中使用Fragment 。 只需使用getSupportLoaderManager()而不是getLoaderManager()并且应该全部设置。 当然,您可以为每个屏幕实现一个父FragmentActivity ,并使其在Fragment显示其布局(通过在Activity的onCreate()方法中使用FragmentActivity.getSupportFragmentManager() )。 如果您决定针对平板电脑优化应用程序,此devise可能会使您更轻松地转换到多窗格布局。 这也是一个很好的学习经验:)。

这也是一个很不错的教程 。 如果您有任何其他问题,请尝试通过它,并毫不犹豫地留下评论。