百度地图Android SDK运行时遇到Fatal signal 11 (SIGSEGV)问题的解决方法_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 百度地图Android SDK运行时遇到Fatal signal 11 (SIGSEGV)问题的解决方法

百度地图Android SDK运行时遇到Fatal signal 11 (SIGSEGV)问题的解决方法

 2013/7/12 0:14:57  peter.xu.1984.cn  程序员俱乐部  我要评论(0)
  • 摘要:现象repro:1.第一次运行App,没有问题。2.按返回键推出App。3.再次运行App,出现如下错误,App无法启动。4.再次运行App,App正常启动。5.如此往复。原因:这个错误发生在App启动,初始化百度地图时。通常是由上次退出App时百度地图的后台Service资源释放不完全造成的。如果该错误出现在退出App时,则是百度地图相关模块的Destory顺序有问题。正确初始化/释放时序:privateBMapManagermBMapManager
  • 标签:SDK android 方法 解决方法 解决 运行 问题 百度

?

现象repro:

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

2. 按返回键推出App。

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

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

5. 如此往复。



?

原因:

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

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

?

正确初始化/释放时序:

class="java" name="code">	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));
	}

?

  • 大小: 24.6 KB
  • 查看图片附件
上一篇: 设计模式之策略模式 下一篇: 没有下一篇了!
发表评论
用户名: 匿名