关于CursorLoader和LoaderManager android的澄清

关于CursorLoader和LoaderManager android的澄清,android,Android,您好,我有一个实现LoaderCallbacks的类,因此覆盖了未实现的方法。onCreateLoader()、onLoaderFinshed()和onLoaderReset() 在活动onCreate()中,我准备了一个加载程序: getLoaderManager().initLoader(0, null, this); 在onCreateLoader()中,我在这里返回了一个自定义加载程序类,它通过christain扩展了SimpleLoader类 现在我想知道,如果我在类中onCreat

您好,我有一个实现LoaderCallbacks的类,因此覆盖了未实现的方法。onCreateLoader()、onLoaderFinshed()和onLoaderReset()

在活动onCreate()中,我准备了一个加载程序:

getLoaderManager().initLoader(0, null, this);
在onCreateLoader()中,我在这里返回了一个自定义加载程序类,它通过christain扩展了SimpleLoader类

现在我想知道,如果我在类中onCreateLoader()方法之外的某个地方执行此操作:


LoaderCallback是否保留对它的引用并调用onLoadFinished(),或者这是一个完全不同的实现。这到底意味着什么?谢谢。

创建新的游标Loader与LoaderManager无关

然后,在创建新的游标加载程序时,将调用
onLoadFinished()
方法而不是

如果数据发生变化怎么办: 如果加载器监视的数据发生变化,加载器将重新查询自身。但是,如果未通过
onCreateLoader
方法将此加载程序提供给LoaderManager,则不会调用
onLoadFinished()

总结如下: 想象一下,您或其他人正在修改加载程序监视的数据

如果此加载程序已由
onCreateLoader
提供给LoaderManager,则将调用
onLoadFinished()


如果此加载程序未由
onCreateLoader
提供给LoaderManager,则将调用
onLoadFinished()

谢谢你提供的信息。因为它不调用onLoadfinished()。这是否意味着可以直接使用结果。我的意思是,我可以做这个cursor=loader.loadInBackground()并直接使用它,而不需要花费任何代价?方法“loadInBackground”应该在工作线程上调用,而不是在UI线程上调用。您可能希望阅读该方法的源代码(带有eclipse附加的源代码或此处:),以了解它的确切功能。正如您所看到的,该方法只是生成一个非异步的常规查询。然后,您可以像您所说的那样“直接”使用它,但您应该知道它不是应该使用的方式。您可以尝试使用AsyncQueryHandler()来生成不会阻塞UI线程的异步查询。
CursorLoader loader = new cursorLoader(
this,android.provider.ContactsContract.Contacts.CONTENT_URI, null,null,null,null);
loader.loadInBackground();
//cursor = loader.loadInBackground();