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()
不是异步的,我以前从未 运行 参与过。
我一直使用 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()
不是异步的,我以前从未 运行 参与过。