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

Android Google Maps v2. getMapAsync() does not run in a separate thread?

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

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

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);
    }

并且在我的主 activity 中添加了地图片段。

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

Is getMapAsync() meant to run on a separate thread?

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

Or am I meant to setup the background task myself?

可以,但要注意代码放在哪里。

I pass a reference of the callback (onMapReadyCallback) which is implemented in my main activity to this class.

错了。与地图相关的任何代码都应包含在您的地图片段中(同时保持命名约定,即使像 MyMapFragment 这样愚蠢的东西也比 Map 好得多)。

这意味着您通过 newInstance 提供输入数据,在 MyMapFragment 中实现 onMapReadyCallback (此回调主要用于修改地图标记、相机位置等)。如果你真的需要让外部 Activity 知道地图已经准备好了,你可以实现 fragment callbacks in this standard way.