【问题标题】:AsyncTaskLoader: onLoadFinished not called after orientation changeAsyncTaskLoader:方向更改后未调用 onLoadFinished
【发布时间】:2013-05-08 11:52:04
【问题描述】:

我有一个AsyncTaskLoader 有一个长时间运行的任务,当加载器运行时,我的活动由于方向变化而被破坏,onLoadFinished 回调未被调用。

我可以以某种方式将加载程序“重新附加”到我的新活动/它的回调吗?

这是我的(简化版)活动

public class DashboardActivity extends BaseActivity {

StartupCallback startupCallback;
    boolean loading = false; 

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.empty_viewpager);
    startupCallback = new StartupCallback();

    if (!loading){
         getSupportLoaderManager().initLoader(GlobalApp.giveId(), null,
                startupCallback);
                 loading = true; 
    }
}


private class StartupCallback implements
        LoaderManager.LoaderCallbacks<Boolean> {
    @Override
    public void onLoadFinished(Loader<Boolean> loader, Boolean succ) {

        Log.d("LOG", "onLoadFinished"); 
    }

    @Override
    public Loader<Boolean> onCreateLoader(int id, Bundle args) {

        return new StartupLoader(getApplicationContext());
    }

    @Override
    public void onLoaderReset(Loader<Boolean> loader) {

    }
}

}

我不能只用新的回调启动另一个加载器,因为加载器会处理数据库内容,而两个加载器在同一个数据库上工作会使应用程序崩溃。

【问题讨论】:

  • 我认为您的问题是重新启动活动。默认情况下,当您更改方向时,android 会重新创建活动。为了防止这种情况,请在此处添加有关 android:configChanges 的信息:developer.android.com/guide/topics/manifest/…
  • 谢谢,但正如您所说,这是默认行为,我不想更改它;停止 Activity 在方向更改时重新启动可能在这里有效,但在我可能遇到相同问题的其他地方给我带来麻烦。
  • 您的新 StartupLoader 看起来如何?代码?

标签: android


【解决方案1】:

在方向更改期间,您的 Activity 会被销毁并重新创建,但加载器不会。

值得注意的是,对 initLoader() 的调用不一定启动另一个加载程序。 如果由特定 ID 寻址的加载程序存在,LoaderManager 重用,并且您的回调将重新附加到它。因此,您可以删除 (!loading) 条件,并在 every onCreate() 回调中调用 initLoader。只需确保加载程序的 ID 相同即可。

另见Loader guide

【讨论】:

    【解决方案2】:

    根据文档,只要 id 与您第一次传递的相同,它应该返回当前加载程序而不是新加载程序:android docs

    【讨论】:

      【解决方案3】:

      android:configChanges="orientation|screenSize" 添加到我的活动中对我来说是诀窍。

      【讨论】:

        猜你喜欢
        • 2017-11-03
        • 1970-01-01
        • 1970-01-01
        • 2023-03-09
        • 1970-01-01
        • 2012-07-15
        • 1970-01-01
        • 1970-01-01
        • 2013-04-29
        相关资源
        最近更新 更多