Android蜂巢中的装载机

Android蜂巢中的装载机,android,android-3.0-honeycomb,android-loadermanager,android-loader,Android,Android 3.0 Honeycomb,Android Loadermanager,Android Loader,我试图弄清楚如何在Android 3.0中使用加载程序,但似乎无法让它正常工作。这些文档只描述了如何使用CursorLoader,但我使用的是AsyncTaskLoader 从文档中可以看出,您似乎只需要实现AsyncTaskLoader.loadInBackground(),但在getLoaderManager().initLoader()之后,再也不会调用它,然后在回调中创建加载程序 我可以看到调试消息说创建了新的加载器LoaderInfo{4040a828}0:ArticleDataLoa

我试图弄清楚如何在Android 3.0中使用
加载程序
,但似乎无法让它正常工作。这些文档只描述了如何使用
CursorLoader
,但我使用的是
AsyncTaskLoader

从文档中可以看出,您似乎只需要实现
AsyncTaskLoader.loadInBackground()
,但在
getLoaderManager().initLoader()
之后,再也不会调用它,然后在回调中创建加载程序

我可以看到调试消息说
创建了新的加载器LoaderInfo{4040a828}0:ArticleDataLoader{4036b350}
,所以它似乎创建成功了

是否有可能加载程序当前在SDK中已损坏,或者在创建加载程序后是否需要调用某些方法?(他们在
CursorLoader
示例中没有这样做)

编辑:似乎对从
initLoader()
返回的加载程序调用
forceLoad()
,至少开始加载,但这意味着您无法正确处理旋转:(

Alex; 是否尝试验证是否调用了onLoadInBackground()


onLoadInBackground():在工作线程上调用以执行实际加载。实现不应直接传递结果,但应从此方法返回结果,最终将在UI线程上调用deliverResult(D)。如果实现需要在UI线程上处理结果,则可以覆盖deliverResult(D)这样做。

Dianne Hackborn在bug tracker上回复,并让我们参考静态库实现。CursorLoader正在执行forceLoad(),这就是它工作的原因


在bug tracker上查看我的附加类,了解在大多数简单情况下为您处理此问题的类:

您需要重写onStartLoading()方法


如果你找到了这个问题的答案,请也告诉我。我什么也找不到。还有一个问题提到了与“编辑”注释相同的解决方法。是的,这是我的错误报告:)你检查过了吗?不,除非你执行forceLoad(),否则不会调用它。他们真的需要记录CPL>。这太糟糕了。因此,这里显示的示例是:如果使用支持库,除非覆盖
onStartLoading
,否则将无法工作。因此,现在我有了自己的使用支持库的ASyncTaskLoader参考源:
    /**
     * Handles a request to start the Loader.
     */
    @Override protected void onStartLoading() {
        if (mApps != null) {
            // If we currently have a result available, deliver it
            // immediately.
            deliverResult(mApps);
        }

        // Start watching for changes in the app data.
        if (mPackageObserver == null) {
            mPackageObserver = new PackageIntentReceiver(this);
        }

        // Has something interesting in the configuration changed since we
        // last built the app list?
        boolean configChange = mLastConfig.applyNewConfig(getContext().getResources());

        if (takeContentChanged() || mApps == null || configChange) {
            // If the data has changed since the last time it was loaded
            // or is not currently available, start a load.
            forceLoad();
        }
    }