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();
答案 0 :(得分:2)
getMapAsync()是否意味着在一个单独的线程上运行?
不,不是。同步代码将在您编写它时执行。在编写异步代码时,您会说当某个事件(地图加载)在将来的某个时间发生时会发生什么。除非另有说明(如在AsyncTask
中),否则异步执行并不意味着使用单独的线程。
或者我打算自己设置后台任务?
是的,但请注意放置代码的位置。
我将在我的主要活动中实现的回调(onMapReadyCallback)的引用传递给此类。
错误。任何与地图相关的代码都应该包含在地图片段中(同样保持命名约定,即使像MyMapFragment
这样的愚蠢行为也比Map
更好)。
这意味着您通过newInstance
提供输入数据,在onMapReadyCallback
内实现MyMapFragment
<(1}}(此回调主要用于修改地图标记,相机位置等)。如果你真的需要让外面的Activity
知道,地图已经准备就绪,那就实施fragment callbacks in this standard way。