没有日志的 MapView 崩溃
MapView crash without log
我有一个简单的 activity,只有一个 MapView 元素。地图加载正常,但一旦我放大/缩小应用程序就崩溃了,没有给我任何类型的日志(我也尝试过不使用包过滤器,但出现了任何有用的东西)。我唯一怀疑的是内存问题,但我不知道如何检查并最终修复它。
Activity:
public class PointsOfInterest extends AppCompatActivity implements OnMapReadyCallback {
private MapView mapView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_map);
/* MapView */
mapView = (MapView) findViewById(R.id.mapView);
mapView.onCreate(savedInstanceState);
mapView.getMapAsync(this);
}
@Override
protected void onResume() {
super.onResume();
mapView.onResume();
}
@Override
public void onMapReady(GoogleMap map) {
map.addMarker(new MarkerOptions().position(new LatLng(0, 0)).title("Marker"));
}
@Override
protected void onPause() {
mapView.onPause();
super.onPause();
}
@Override
protected void onDestroy() {
mapView.onDestroy();
super.onDestroy();
}
@Override
public void onLowMemory() {
super.onLowMemory();
mapView.onLowMemory();
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mapView.onSaveInstanceState(outState);
}
}
布局:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.gms.maps.MapView
android:id="@+id/mapView"
android:layout_width="match_parent"
android:layout_height="230dp" />
</LinearLayout>
更新:与片段同样的问题:
Activity:
public class PointsOfInterest extends AppCompatActivity implements OnMapReadyCallback {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_map);
SupportMapFragment mMapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
mMapFragment.getMapAsync(this);
}
@Override
public void onMapReady(GoogleMap googleMap) {
}
}
布局:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment
android:id="@+id/map"
class="com.google.android.gms.maps.SupportMapFragment"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="230dp" />
</LinearLayout>
顺便说一下,如果我尝试使用 "match_parent" 而不是 230dp,应用程序会在我移动地图或放大/缩小时立即重新启动(换句话说,当我必须加载新的地图数据时).地图越小,我可以使用它的时间就越长。
这让我更加想到内存问题(无论如何,加载地图时 RAM 使用量仅为 40MB,峰值为 50MB,立即 GC 再次下降到 40MB)
显然您正在尝试使用 lite mode 中的地图。该文件说,在该模式下,不允许用户平移或缩放。
如果您确实需要 pan/zoom 功能,请改为执行此操作:
1) 将此片段添加到您的 activity 布局 xml:
...
<fragment
android:id="@+id/map"
class="com.google.android.gms.maps.SupportMapFragment"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" />
...
2) 在您的 activity onCreate
:
上像这样初始化地图
mMapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
mMapFragment.getMapAsync(this);
我有一个简单的 activity,只有一个 MapView 元素。地图加载正常,但一旦我放大/缩小应用程序就崩溃了,没有给我任何类型的日志(我也尝试过不使用包过滤器,但出现了任何有用的东西)。我唯一怀疑的是内存问题,但我不知道如何检查并最终修复它。
Activity:
public class PointsOfInterest extends AppCompatActivity implements OnMapReadyCallback {
private MapView mapView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_map);
/* MapView */
mapView = (MapView) findViewById(R.id.mapView);
mapView.onCreate(savedInstanceState);
mapView.getMapAsync(this);
}
@Override
protected void onResume() {
super.onResume();
mapView.onResume();
}
@Override
public void onMapReady(GoogleMap map) {
map.addMarker(new MarkerOptions().position(new LatLng(0, 0)).title("Marker"));
}
@Override
protected void onPause() {
mapView.onPause();
super.onPause();
}
@Override
protected void onDestroy() {
mapView.onDestroy();
super.onDestroy();
}
@Override
public void onLowMemory() {
super.onLowMemory();
mapView.onLowMemory();
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mapView.onSaveInstanceState(outState);
}
}
布局:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.gms.maps.MapView
android:id="@+id/mapView"
android:layout_width="match_parent"
android:layout_height="230dp" />
</LinearLayout>
更新:与片段同样的问题:
Activity:
public class PointsOfInterest extends AppCompatActivity implements OnMapReadyCallback {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_map);
SupportMapFragment mMapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
mMapFragment.getMapAsync(this);
}
@Override
public void onMapReady(GoogleMap googleMap) {
}
}
布局:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment
android:id="@+id/map"
class="com.google.android.gms.maps.SupportMapFragment"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="230dp" />
</LinearLayout>
顺便说一下,如果我尝试使用 "match_parent" 而不是 230dp,应用程序会在我移动地图或放大/缩小时立即重新启动(换句话说,当我必须加载新的地图数据时).地图越小,我可以使用它的时间就越长。 这让我更加想到内存问题(无论如何,加载地图时 RAM 使用量仅为 40MB,峰值为 50MB,立即 GC 再次下降到 40MB)
显然您正在尝试使用 lite mode 中的地图。该文件说,在该模式下,不允许用户平移或缩放。
如果您确实需要 pan/zoom 功能,请改为执行此操作:
1) 将此片段添加到您的 activity 布局 xml:
...
<fragment
android:id="@+id/map"
class="com.google.android.gms.maps.SupportMapFragment"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" />
...
2) 在您的 activity onCreate
:
mMapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
mMapFragment.getMapAsync(this);