我有一个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) {
}
}
}
我不能用新的回调启动另一个加载器,因为加载器执行数据库操作,并且在同一数据库上工作的两个加载器将使应用程序崩溃。
在方向更改期间,您的 Activity 将被销毁并重新创建,但加载程序不会。
值得注意的是,调用 initLoader() 并不一定开始另一个装载机。
如果特定ID所寻址的加载程序存在,则它是reused通过 LoaderManager 并且您的回调将重新附加到它。因此,您可以删除 (!loading) 条件,并在中调用 initLoadereveryonCreate() 回调。只需确保加载程序的 ID 相同即可。
也可以看看装载机指南 http://developer.android.com/guide/components/loaders.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)