【问题标题】:Android: What is the reason for deprecating startManagingCursor?Android:弃用 startManagingCursor 的原因是什么?
【发布时间】:2012-06-19 19:53:21
【问题描述】:

弃用 startManagingCursor 的原因是什么?

我的简单应用有一个表格视图,其中包含来自数据库的数据列表。所以,我现在在 onCreate 中有什么:

 final Cursor cursor = getDataFromDB();
 startManagingCursor(cursor);
 setListAdapter(new CursorAdapter(cursor));

就是这样,我不需要做任何其他事情......

但是 startManagingCursor 现在已被弃用,我应该实现 LoaderCallbacks ,覆盖 onCreateLoader、onLoadFinished、onLoaderReset、为我的数据库创建 ContentProvider 等等。但我不需要所有这些员工,我只需要从数据库中获取几行信息。怎样成为 ?为什么安卓这样做?我为什么要实施所有这些人员?

【问题讨论】:

标签: android


【解决方案1】:

话虽如此,Android 中的“已弃用”通常意味着“我们将继续支持此功能,但我们认为有更好的解决方案”。

如果你愿意继承 FragmentActivity,你可以使用 Android Support 包中的 Loader 框架实现,一直追溯到 Android 1.6。

您当然可以在 API 级别 11+ 上使用 startManagingCursor()。但是,托管游标的问题(特别是在主应用程序线程上的活动重新启动时 requery())仍然存在,无论是较旧的还是较新的 Android 版本。

来源:Android eclipse startManagingCursor Deprecated but want to support older API versions?

【讨论】:

  • -1 哇,从另一个用户的答案中直接复制并粘贴。至少引用了来源。
【解决方案2】:

我认为“为什么”它被弃用的原因是他们真的希望人们采用 ContentProviders。这在他们推送Loaders 时更加明显,并且他们提供了一个仅适用于ContentProviders 的CursorLoader(个人认为这个名字很糟糕,应该叫ContentLoader

因为startManagingCursor 在活动中,所以人们很容易做(就像您在示例中所做的那样),只需在 UI 线程上运行 db 查询,导致暂停,有时会导致 ANR。

您可以编写自己的 CursorLoader 与 Cursors 而不是 ContentProviders 一起工作,并使其成为可重用的类,这样您就可以在不使用 ContentProviders 的情况下使用 Loader 框架。

我对此的解决方案是简单地构建一个小型框架,使创建内容提供者成为一项相当简单的操作,这样我就可以利用现有的CursorLoader

【讨论】:

    猜你喜欢
    • 2021-12-03
    • 2011-09-26
    • 1970-01-01
    • 2017-04-10
    • 1970-01-01
    • 2012-05-29
    • 1970-01-01
    • 2016-08-28
    • 2016-09-01
    相关资源
    最近更新 更多