getMapAsync 使设备崩溃

getMapAsync crashes device

我一直使用 mapView.getMap(),直到它被弃用。从那时起,我尝试切换到使用以下内容:

activity.runOnUiThread(
            new Runnable() {
                @Override
                public void run() {
                    mapView.getMapAsync(new OnMapReadyCallback() {
                        @Override
                        public void onMapReady(final GoogleMap googleMap) {
                            if (googleMap != null) {

长了一点,看起来差不多。唯一的问题是,这会在删除地图时使我的应用程序崩溃。通过调用 removeAllViews(); 它的父项之一,多个父项来删除地图。

地图包含在单例中。

public static MapDetailsPane getInstance() {
    if (instance == null) {
        synchronized (MapDetailsPane.class) {
            if (instance == null) {
                instance = new MapDetailsPane();
            }
        }
    }
    return instance;
}

private MapDetailsPane() {
    mapView = new MapView(context);

因此 mapView 被重复使用。

崩溃可能有两种不同的结果,应用程序只是崩溃并且没有给出报告,或者设备完全重启。我目前的测试设备是 运行 Android 5.0.2,我没有任何其他设备(很容易)可供我测试。

问题的原因可能是什么?我该如何解决这个问题?由于设备完全重启,到目前为止调试非常困难。

在使用 logcat 进行(大量)调试之后,我终于找到了问题所在。 mapview 的父级之一将其宽度设置为 0。显然 mapview 不喜欢这样,并决定是时候重启平板电脑了。由于 mapview.getMap() 不是异步的,我以前从未 运行 参与过。