我有一个具有长时间运行任务的AsyncTaskLoader,当加载器正在运行时,由于方向改变而导致我的活动被破坏,因此不会调用onLoadFinished回调.
我可以以某种方式’重新连接’加载器到我的新Activity /它的回调?
这是我的(简化)活动:
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) {
}
}
}
我不能只使用新的回调启动另一个加载器,因为加载器执行数据库操作,并且在同一数据库上运行的两个加载器将使应用程序崩溃.
最佳答案 在方向更改期间,您的活动将被销毁并重新创建,但装载程序不会.
值得注意的是,对initLoader()的调用不一定会启动另一个加载器.
如果存在由特定ID处理的加载器,则LoaderManager会重新使用它,并且您的回调会重新附加到它.因此,您可以删除(!load)条件,并在每个onCreate()回调中调用initLoader.只需确保加载程序的ID相同即可.