从活动中保留ASyncTask,而不是片段

时间:2012-12-20 17:31:20

标签: android android-asynctask

所以..

我所拥有的内容如下,一个复杂的基于片段的viewpager利用tabhosts等与我的活动。这是基本设置。

创建完成后,我使用AsyncTask从我的数据库中获取一些数据。当ASyncTask完成后,我使用fragmentmanager找到viewpager的相应片段,并在每个设置数据的片段中调用函数。例如,在片段A中,数据被设置为列表适配器中的列表,而在片段B中,数据被绘制在地图上。

我已经这样设置了,因为所有片段都使用相同的数据,我只想调用一个ASyncTask。它运作得很好。

我的问题是当用户在加载时旋转屏幕。所以从一个片段调用ASyncTask你可以使用setRetainInstance,之前在一个活动中你可以使用onRetainNoneConfigurationInstance ..但是现在已经弃用了。

我花了很多年的时间搜索,没有人似乎对这种特殊情况有答案。

有人可以提供建议吗?

2 个答案:

答案 0 :(得分:2)

您可以使用隐身Fragment来保留您的州。它与onRetainNoneConfigurationInstance基本相同,但不予弃用。

请参阅http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html#config-changes

示例中有一个错误,您必须将RetainFragment添加到FragmentManager,否则它将无法恢复。

public static RetainFragment findOrCreateRetainFragment(FragmentManager fm) {
    RetainFragment fragment = (RetainFragment) fm.findFragmentByTag(TAG);
    if (fragment == null) {
        fragment = new RetainFragment();
        fm.beginTransaction().add(fragment, TAG).commit(); // add this
    }
    return fragment;
}

答案 1 :(得分:0)

使用IntentService从数据库中获取数据,您不必担心配置更改。发送Intent以获取数据,使用LocalBroadcastManager将广播Intent发送回您要通知的任何其他组件。