15

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

此构造函数已弃用。不鼓励使用此选项,因为它会导致在应用程序的 UI 线程上执行游标查询,从而导致响应速度不佳甚至应用程序无响应错误。作为替代方案,将 LoaderManager 与 CursorLoader 一起使用。

由于我的目标是 API 级别 8,因此 aLoaderManager不绑定到Activity. 兼容性包中的FragmentActivity类执行此操作,但我没有使用 Fragments。

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

4

1 回答 1

23

编辑:

LoaderManager在这篇文中写了相当广泛的内容。检查一下,让我知道它是否有帮助!:)


原帖:

绝对,绝对,绝对和LoaderManager。该类CursorLoader卸载了在线程上加载数据的工作,并在短期活动刷新事件(例如方向更改)期间保持数据持久性。除了执行初始查询外,它还向您请求的数据集CursorLoader注册 aContentObserver并在数据集更改时调用forceLoad()自身,从而自动更新。这非常方便,因为您不必担心自己执行查询。当然可以利用它AsyncTask来保持您的应用程序 UI 线程友好,但它会涉及更多代码......并且实现您的类,例如,保留加载CursorActivity内容并不简单。底线是LoaderManager/Loader将自动为您执行此操作,并Cursor根据Activity生命周期正确创建和关闭。

LoaderManager/CursorLoader在针对 pre-11 API 级别的应用程序中使用,只需使用FragmentActivity兼容性包中的类。AFragmentActivity只是Activity为 Android 兼容性支持而创建的,并且不需要Fragment在您的应用程序中使用 s。只需使用getSupportLoaderManager()而不是,getLoaderManager()你应该已经准备好了。当然,您可以FragmentActivity为每个屏幕实现一个父级,并让它在 a 中显示其布局Fragment(通过FragmentActivity.getSupportFragmentManager()在 Activity 的onCreate()方法中使用)。如果您决定针对平板电脑优化您的应用程序,这种设计可能会使您更轻松地过渡到多窗格布局。这也是一个很好的学习经历:)。

This is a pretty nice tutorial too. Try and work your way through it and don't hesitate to leave a comment if you have any other questions.

于 2012-01-17T19:13:53.987 回答