谷歌地图v2从堆栈弹出片段后滞后

zbr*_*zbr 8 android android-fragments android-maps-v2

我有一个ActivityMapFragment我添加到Activity编程使用FragmentTransaction:

private static final String MAP_FRAGMENT_TAG = "map";
private MapFragment mapFragment = null;

...

protected void onCreate(Bundle savedInstanceState) {

    ...

    mapFragment = (MapFragment) getFragmentManager().findFragmentByTag(MAP_FRAGMENT_TAG);
    if (mapFragment == null) {
        mapFragment = MapFragment.newInstance();
        FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
        fragmentTransaction.add(R.id.fragment_wrapper, mapFragment, MAP_FRAGMENT_TAG);
        fragmentTransaction.commit();
    }

    ...

}
Run Code Online (Sandbox Code Playgroud)

标准方式.然后我从中获取GoogleMap实例mapFragment并设置其设置,设置监听器,用它做事.一切正常.

然后当用户完成地图时,AsyncTask触发显示a ProgressDialog,执行一些操作,将不同的片段放入fragment_wrapperProgressDialog再次关闭:

private class GetFlightsTask extends AsyncTask<Double, Void, String> {

@Override
protected void onPreExecute() {
    super.onPreExecute();
    // the activity context has been passed to the AsyncTask through its constructor
    loadingFlightsSpinner = new ProgressDialog(context);
    // setting the dialog up
    loadingFlightsSpinner.show();
}

@Override
protected String doInBackground(Double... params) {
    // some pretty long remote API call
    // (loading a JSON file from http://some.website.com/...)
}

@Override
protected void onPostExecute(String flightsJSON) {
    super.onPostExecute(flightsJSON);
    // here I do stuff with the JSON and then I swtich the fragments like this
    FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
    FlightsFragment fragment = new FlightsFragment();
    fragmentTransaction.replace(R.id.fragment_wrapper, fragment);
    fragmentTransaction.addToBackStack(null);
    fragmentTransaction.commit();
    loadingFlightsSpinner.dismiss();
}
Run Code Online (Sandbox Code Playgroud)

一切都还行.用户做了一些事情FlightsFragment然后决定回到地图.按下背部按钮,地图上再次弹出.这就是地图变得迟钝的时候.它上面的国家/城市名称加载速度非常慢,它在移动地图方面严重滞后......我不知道为什么,我不会做任何关于弹出MapFragment背面的事情.

有趣的是,例如在按下主页按钮然后再次返回应用程序时它会得到修复...

我究竟做错了什么?

谢谢你的任何想法.

zbr*_*zbr 1

我已经通过忽略 the方法ProgressDialog末尾而不是方法开头的已经修复了它。AsyncTaskdoInBackground()onPostExecute()

这有点奇怪,因为我实际上认为我不应该在doInBackground()方法中接触 UI 中的东西...如果有人想详细说明一下,我会很高兴了解为什么它会这样工作。