java - 如何从 managedQuery 过渡到 LoaderManager/CursorLoader?

标签 java android android-fragments simplecursoradapter android-loadermanager

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

This constructor is deprecated. This option is discouraged, as it results in Cursor queries being performed on the application's UI thread and thus can cause poor responsiveness or even Application Not Responding errors. As an alternative, use LoaderManager with a CursorLoader.

因为我的目标是 API 级别 8,所以 LoaderManager 没有绑定(bind)到 Activity。兼容包中的 FragmentActivity 类可以执行此操作,但我没有使用 Fragment。

我的问题是:我应该如何在针对 API 11 之前级别的应用中使用 LoaderManager/CursorLoader?我是被迫过渡到 Fragments 还是应该恢复到已弃用的 SimpleCursorAdapter 构造函数(但使用 AsyncTask 来保持 UI 线程友好,这就是CursorLoader 应该做什么)?

最佳答案

编辑:

我在 blog post 中对 LoaderManager 进行了广泛的介绍。 .检查一下,让我知道它是否有帮助! :)


原帖:

绝对,绝对,绝对与 LoaderManager 一起使用。 CursorLoader 类卸载线程上加载数据的工作,并在短期 Activity 刷新事件(例如方向更改)期间保持数据持久。除了执行初始查询外,CursorLoader 还会向您请求的数据集注册一个 ContentObserver,并在数据集出现时调用自身的 forceLoad()变化,因此自动更新。这非常方便,因为您不必担心自己执行查询。当然可以使用 AsyncTask 来保持您的应用程序 UI 线程友好,但它会涉及更多的代码......并实现您的类,例如,保留在 Activity 上加载 Cursor 并不简单。底线是 LoaderManager/Loader 会自动为您执行此操作,并负责根据 ActivityCursor生命周期。

要在面向 11 之前 API 级别的应用中使用 LoaderManager/CursorLoader,只需使用兼容包中的 FragmentActivity 类。 FragmentActivity 只是一个 Activity,是为 Android 兼容性支持而创建的,不需要在您的应用程序中使用 Fragment。只需使用 getSupportLoaderManager() 而不是 getLoaderManager() 就可以了。当然,您可以为每个屏幕实现一个父 FragmentActivity 并让它在 Fragment 中显示其布局(通过使用 FragmentActivity.getSupportFragmentManager() 在 Activity 的 onCreate() 方法中)。如果您决定为平板电脑优化您的应用程序,这种设计可能会使向多 Pane 布局的过渡更容易。这也是一次很好的学习经历:)。

这是一个相当不错的tutorial也。尝试并完成它,如果您有任何其他问题,请随时发表评论。

关于java - 如何从 managedQuery 过渡到 LoaderManager/CursorLoader?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8899497/

相关文章:

android - 如何在运行时使用 fragment 动态设置操作栏中可滑动选项卡的数量

java - 无法在 RecyclerView 中使用 ViewHolder

安卓时钟应用设置闹钟

android - 官方 Android 滑动/选项卡示例包括已弃用的功能 : Is there an alternative sample?

java - 将经常使用的字段分配给局部变量是否更有效?

android - Slidingdrawer 切换图标不可见

java - 在选项卡更改时强制刷新 fragment

java - 使用Livy提交Spark作业时报错: User did not initialize spark context

java - 如何使用 JAX-RS 设置字符集?

java - 如何使用preparedstatement更新SQL Server列中 "Geometry"的数据