在旧的Activity上调用onPostExecute()

时间:2017-12-28 13:31:56

标签: android android-fragments android-asynctask

我正在开发一个必须能够在AsyncTask运行期间轮换的应用。

我试图实现this帖子中找到的this模式。我还实现了onPause()onResume(),我可以使用json和gson(重新)将数据存储在共享首选项中。这部分似乎运作良好。

AsyncTask调用onPostExecute()而不旋转屏幕时,一切正常。但是,当屏幕在 <{1}}期间旋转时,AsyncTask我的应用显示出奇怪的行为。仔细观察,我注意到在调试时(在Android Studio中)onPostExecute()MainActivity的{​​ID}与onPostExecute()创建的MainActivity的ID不同。因此,在onCreate()期间,使用 onPostExecute()处理数据,同时已创建另一个MainActivity!在AsyncTask完成之前,视图不会完全更新。这可能也是一个不好的迹象......

很难从我的代码中提取一个小项目,但正如我所说,我使用了this博客中的代码。唯一真正的区别是,为了防止内存泄漏,而不是内部MainActivity我设法创建一个(内部)私有静态类:

private class DummyTask

我是从here获得的。

这就是我的onCreate()的样子:

private static class MoveMrXAsyncTask extends AsyncTask<Void, Void, Move> {

    private WeakReference<TaskCallbacks> activityReference;
...
}

我做错了什么?我忘记了@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); FragmentManager fm = getFragmentManager(); mTaskFragment = (TaskFragment) fm.findFragmentByTag(TAG_TASK_FRAGMENT); // If the Fragment is non-null, then it is currently being // retained across a configuration change. if (mTaskFragment == null) { mTaskFragment = new TaskFragment(); fm.beginTransaction().add(mTaskFragment, TAG_TASK_FRAGMENT).commit(); } viewModel = new MainActivityViewModel(getApplicationContext(), mTaskFragment); ActivityMainBinding activityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main); activityMainBinding.setViewmodel(viewModel); } 的某些内容吗?我正在使用android.app.Fragment。这是正确的片段类吗?

或者数据绑定可能是问题吗?我是否必须解除旧活动中的所有数据绑定并重新绑定到新活动?

0 个答案:

没有答案