当前位置: 代码迷 >> Android >> 百度mapAndroid SDK运行时遇到Fatal signal 11 (SIGSEGV)有关问题的解决办法
  详细解决方案

百度mapAndroid SDK运行时遇到Fatal signal 11 (SIGSEGV)有关问题的解决办法

热度:269   发布时间:2016-05-01 10:19:05.0
百度地图Android SDK运行时遇到Fatal signal 11 (SIGSEGV)问题的解决方法

?

现象repro:

1. 第一次运行App,没有问题。

2. 按返回键推出App。

3. 再次运行App,出现如下错误,App无法启动。

4. 再次运行App,App正常启动。

5. 如此往复。



?

原因:

这个错误发生在App启动,初始化百度地图时。通常是由上次退出App时百度地图的后台Service资源释放不完全造成的。

如果该错误出现在退出App时,则是百度地图相关模块的Destory顺序有问题。

?

正确初始化/释放时序:

	private BMapManager mBMapManager;	private MapView mMapView;	private MKOfflineMap mapOffline;	private MKSearch mapSearch;	private Context context;	@Override	protected void onCreate(Bundle savedInstanceState) {		Log.i(Name, "onCreate");		super.onCreate(savedInstanceState);		this.context = this.getApplicationContext();		mBMapManager = new BMapManager(getApplication());		mBMapManager.init("your key", null);		/***		 * 必须在初始化百度地图manager之后才能setContentView		 * 在官方文档中也有相同描述		 ***/		setContentView(R.layout.activity_main);		GeoPoint yourLocation = new GeoPoint((int) (39.915 * 1E6),	(int) (116.404 * 1E6));		initBaiduMap(yourLocation);	}	@Override	protected void onDestroy() {		Log.i(Name, "onDestroy");		/***		 * 必须按此顺序执行destory!		 * 有使用离线地图的离线地图控制器也要销毁		 ***/		mapOffline.destroy();		mMapView.destroy();		mBMapManager.destroy();		super.onDestroy();	}	@Override	protected void onPause() {		Log.i(Name, "onPause");		mMapView.onPause();		mBMapManager.stop();		super.onPause();	}	@Override	protected void onResume() {		Log.i(Name, "onResume");		mMapView.onResume();		mBMapManager.start();		super.onResume();	}	private void initBaiduMap(GeoPoint point) {		mMapView = (MapView) findViewById(R.id.bmapsView);		mMapView.setBuiltInZoomControls(true);		MapController mMapController = mMapView.getController();				mapOffline = new MKOfflineMap();		mapOffline.init(mMapController, new MKOfflineMapListener() {			@Override			public void onGetOfflineMapState(int type, int state) {				switch (type) {				case MKOfflineMap.TYPE_DOWNLOAD_UPDATE:					MKOLUpdateElement update = mapOffline.getUpdateInfo(state);					break;				case MKOfflineMap.TYPE_NEW_OFFLINE:					Log.d("OfflineDemo", String.format("add offlinemap num:%d", state));					break;				case MKOfflineMap.TYPE_VER_UPDATE:					Log.d("OfflineDemo", String.format("new offlinemap ver"));					break;				}			}		});		int num = mapOffline.scan();		System.out.println(">>>offlineMaps: " + num);		mMapController.setCenter(point);		mMapController.setZoom(12);				mapSearch = new MKSearch();		mapSearch.init(mBMapManager, new BaiduMapSearchListener(this, mMapView));	}

?

  相关解决方案