【发布时间】: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