Asynctask结果显示重新创建片段后

时间:2017-12-22 16:42:59

标签: android android-fragments android-asynctask

在我的应用中,我使用stdlib.h从用户处获取数据并使用输入的数据通过fragment使用JSON获取结果,然后将其保存到AsyncTask然后显示它在另一个database

问题在于,当我执行fragment并打开asyncTask数据时,除非我旋转设备(强制片段重新创建),否则数据不会显示。

我的第一个片段代码:

fragment

Second Fragment代码:

...
SecondFragment secondFragment = new SecondFragment();
new SecondFragment.GetTask("s").execute(URL);
FragmentTransaction ft =getActivity().getSupportFragmentManager().beginTransaction();
ft.setCustomAnimations(R.anim.slide_in_up, R.anim.slide_in_up);
ft.add(R.id.s_con, secondFragment).addToBackStack("back").commit();
...

1 个答案:

答案 0 :(得分:1)

AsyncTask在另一个线程中执行。第二个片段未更新,因为asynctask在您加载时仍在执行。当您更改方向时,它会简单地重新创建第二个片段,然后Asynctask完成了其更新原因的任务。将AsyncTask移动到第一个片段并在Async任务的onPostExecute()中加载第二个片段。 onPostExecuted()在UI线程中运行。

在片段中使用AsyncTask时,可能会出现方向更改等情况,其中活动将被重新创建,这也会导致您的片段被重新创建,并且将再次调用AsyncTask。这也可能导致内存泄漏。为了避免这种情况,请调用第一个片段的onCreate()内的方法;

setRetainInstance(true);

这不会在方向改变时杀死片段,它会更安全。要了解有关处理方向更改的更多信息,请查看以下链接:

https://developer.android.com/guide/topics/resources/runtime-changes.html