Android 旋转后装载机回撤未命中

Android 旋转后装载机回撤未命中,android,android-loadermanager,android-support-library,android-loader,android-configchanges,Android,Android Loadermanager,Android Support Library,Android Loader,Android Configchanges,我每次使用loader都会遇到这个问题。如果我启动我的AsyncTaskLoader,然后旋转屏幕(一次或几次都不重要)onLoaderFinished(),则不会调用loadInBackground()完成其工作,但未调用onLoaderFinished()。似乎缺少回调,但在活动onCreate()中,我有: LoaderManager lm = getSupportLoaderManager(); if (lm.getLoader(LOADER_FLIGHTS) != null) {

我每次使用loader都会遇到这个问题。如果我启动我的
AsyncTaskLoader
,然后旋转屏幕(一次或几次都不重要)
onLoaderFinished()
,则不会调用
loadInBackground()
完成其工作,但未调用
onLoaderFinished()
。似乎缺少回调,但在活动
onCreate()
中,我有:

LoaderManager lm = getSupportLoaderManager();
if (lm.getLoader(LOADER_FLIGHTS) != null) {
    lm.initLoader(LOADER_FLIGHTS, null, mFlightsLoaderCallbacks);
}
回调由活动或字段实现并不重要。在我的情况下,我使用字段:

LoaderCallbacks<SearchResult> mFlightsLoaderCallbacks = new LoaderCallbacks<SearchResult>() {
LoaderCallbacks mFlightsLoaderCallbacks=新的LoaderCallbacks(){
有时它工作得很好,但在一些设备中,我又遇到了这个问题

我在Android bugs tracker中搜索,但没有找到任何有用的东西

这是我的错误吗?我该如何改正

编辑:

private Handler mHandler = new Handler();

@Override
public void onLoadFinished(Loader<SearchResult> loader, SearchResult res) {
    mHandler.post(new Runnable() {

        @Override
        public void run() {
            dismissProgress(R.string.dlg_wait_flights);
        }
    });
    mResult = res;
    Helper.Log.d(TAG, "Loader.onLoadFinished.");
private Handler mHandler=new Handler();
@凌驾
public void onLoadFinished(加载程序、搜索结果res){
mHandler.post(新Runnable(){
@凌驾
公开募捐{
dismissProgress(R.string.dlg\u wait\u航班);
}
});
mResult=res;
Helper.Log.d(标记为“Loader.onLoadFinished”);

不要将initLoader调用封装在if语句中。事实上,如果在调用initLoader之前您希望加载程序不为null,我甚至不确定initLoader是如何被调用的。

您的活动就是处理程序,或者有一个处理程序对象?您确定它没有被执行,或者只是看不到结果吗?@ClassStackere查看更新的代码关于您的编辑,这意味着您没有看到日志消息?如果我这样做,我的加载程序将立即启动。如果我不想这样做,该怎么办?好的,您是说您在其他地方调用了initLoader,而您的问题中没有包含它。您是否使用setRetainInstance(true)保留您的片段?您的清单中是否注册了任何方向更改?您确定您的initLoader调用是在轮换之后进行的吗?您是否研究过调用方法LoaderManager.restartLoader?这允许您指示加载程序再次加载其数据,并且(取决于加载程序的实现)完成此操作后,将调用onLoadFinished。