Android:弃用startManagingCursor的原因是什么?

时间:2012-06-19 11:25:15

标签: android

弃用startManagingCursor的原因是什么?

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

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

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

但是现在不推荐使用startManagingCursor,我应该实现LoaderCallbacks,覆盖onCreateLoader,onLoadFinished,onLoaderReset,创建我的DB的ContentProvider等等。但我不需要所有这些工作人员,我只需要从DB获取几行信息。怎样成为 ?为什么android会这样做?我为什么要实施所有这些员工?

2 个答案:

答案 0 :(得分:5)

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

如果您愿意从FragmentActivity继承,您可以使用Android支持包中的Loader框架实现,一直回到Android 1.6。

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

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

答案 1 :(得分:4)

我认为“为什么”被弃用的原因是他们真的希望人们采用ContentProviders。这更加明显,因为他们正在推动Loaders,并且他们提供的CursorLoader仅适用于ContentProvider(个人名称错误,应该被称为ContentLoader

因为startManagingCursor在活动中,所以人们很容易做(就像你在你的例子中那样)并且只是在UI线程上运行db查询,导致暂停,有时会导致ANR。 / p>

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

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