Android谷歌地图v2。 getMapAsync()不在单独的线程中运行?

时间:2015-02-04 18:00:43

标签: android google-maps

getMapAsync()是否意味着在单独的线程上运行?我问,因为在我的应用程序中,当地图加载时它似乎在主线程上执行它,因为所有UI都没有响应,直到它加载。我做错了什么?或者我打算自己设置后台任务?

下面的代码是我的SupportMapFragment子类。我将在我的主要活动中实现的回调(onMapReadyCallback)的引用传递给此类。

public class Map extends SupportMapFragment
{

    private OnMapReadyCallback callback;

    public static SupportMapFragment newInstance(OnMapReadyCallback callback)
    {

        Map map = new Map();
        map.callback = callback;
        return map;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        return super.onCreateView(inflater, container, savedInstanceState);
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState)
    {
        super.onActivityCreated(savedInstanceState);
        getMapAsync(callback);
    }

    @Override
    public void getMapAsync(OnMapReadyCallback callback)
    {
        super.getMapAsync(callback);
    }

在我的主要活动中,添加了地图片段。

FragmentManager fragmentManager = this.getSupportFragmentManager();
            fragmentManager.beginTransaction().replace(R.id.map,Map.newInstance(this),Map.class.getName()).commit();

1 个答案:

答案 0 :(得分:2)

  

getMapAsync()是否意味着在一个单独的线程上运行?

不,不是。同步代码将在您编写它时执行。在编写异步代码时,您会说当某个事件(地图加载)在将来的某个时间发生时会发生什么。除非另有说明(如在AsyncTask中),否则异步执行并不意味着使用单独的线程。

  

或者我打算自己设置后台任务?

是的,但请注意放置代码的位置。

  

我将在我的主要活动中实现的回调(onMapReadyCallback)的引用传递给此类。

错误。任何与地图相关的代码都应该包含在地图片段中(同样保持命名约定,即使像MyMapFragment这样的愚蠢行为也比Map更好)。

这意味着您通过newInstance提供输入数据,在onMapReadyCallback内实现MyMapFragment <(1}}(此回调主要用于修改地图标记,相机位置等)。如果你真的需要让外面的Activity知道,地图已经准备就绪,那就实施fragment callbacks in this standard way