consumer close input channel or an error occurred. events=0x8

情况:

我有A, B两个Activity, A和B都使用了百度地图之后,在A跳转到B后,偶然但又很经常的发生页面崩溃现象。而我查看logcat的时候,发现如下错误提示:

com.ym.fm/com.ym.fm.view.HomeActivity (server)' ~ Consumer closed input channel or an error occurred.  events=0x8
E/InputDispatcher(  329): channel '4207e010 com.ym.fm/com.ym.fm.view.HomeActivity (server)' ~ Channel is unrecoverably broken and will be disposed!
I/ActivityManager(  329): Process com.ym.fm (pid 10074) has died.
I/WindowManager(  329): WIN DEATH: Window{43027710 com.ym.fm/com.ym.fm.view.HomeActivity paused=true}
W/InputDispatcher(  329): Attempted to unregister already unregistered input channel '4207e010 com.ym.fm/com.ym.fm.view.HomeActivity (server)'
I/WindowManager(  329): WIN DEATH: Window{4207e010 com.ym.fm/com.ym.fm.view.HomeActivity paused=true}
I/WindowManager(  329): WINDOW DIED Window{4207e010 com.ym.fm/com.ym.fm.view.HomeActivity paused=true}
I/WindowManager(  329): SCREENLAYOUT_SIZE (1:small, 2:normal, 3:large, 4:xlarge) 2
I/RenderThread(  664): RenderThread resumed
I/RenderThread(  664): RenderThread paused, waiting for signal

分析:

根据自己的情况,这些怪现象都是在使用了百度地图才出现的,所以就重点这部分代码。

从log可以看出,重点可以看这句 Consumer closed input channel or an error occurred.  events=0x8 ,在网上一搜,才知道原来android的报错可读性比较差,出现这个错误提示,有可能是因为指针操作有误,例如我们在Activity的OnDestory做了某些置空操作,然而我们所置空的对象,有可能在其他的地方还有引用。

经过排查,果不出所料,因为我在A和B都有使用全局的百度地图管理类BMapManager的对象,我在A和B都有使用该对象,在A和B的OnDestroy都调用了置空操作,当A切换到B,B跳转到A的时候,B已经将BMapManager  Destory掉了,A再调用的时候,就发生错误了,造成页面崩溃了。


解决:

根据百度的官方文档,BMapmanager的对象建议在程序推出的时候才去Destroy,例如:

        @Override
	public void onTerminate() {
		//建议在您app的退出之前调用mapadpi的destroy()函数,避免重复初始化带来的时间消耗
	    if (BMap_Manager != null) {
	    	BMap_Manager.destroy();
	    	BMap_Manager = null;
             }
		super.onTerminate();
	}


你可能感兴趣的:(consumer close input channel or an error occurred. events=0x8)