3

弃用 startManagingCursor 的原因是什么?

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

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

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

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

4

2 回答 2

5

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

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

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

来源:Android eclipse startManagingCursor 已弃用但想支持较旧的 API 版本?

于 2012-06-19T11:28:58.920 回答
4

我认为“为什么”它被弃用的原因是他们真的希望人们采用 ContentProviders。当他们正在推动时,这一点更加明显Loaders,并且他们提供了CursorLoader仅适用于ContentProviders 的ContentLoadera

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

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

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

于 2012-06-19T11:53:21.627 回答