弃用startManagingCursor的原因是什么?
我的简单应用程序有一个表视图,其中包含来自DB的数据列表。所以,我现在在onCreate:
final Cursor cursor = getDataFromDB();
startManagingCursor(cursor);
setListAdapter(new CursorAdapter(cursor));
就是这样,我不需要做任何其他事情......
但是现在不推荐使用startManagingCursor,我应该实现LoaderCallbacks,覆盖onCreateLoader,onLoadFinished,onLoaderReset,创建我的DB的ContentProvider等等。但我不需要所有这些工作人员,我只需要从DB获取几行信息。怎样成为 ?为什么android会这样做?我为什么要实施所有这些员工?
答案 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
。