RunTimeException-Could not read input channel file descriptors from parcel

最近,碰到一个很神奇的bug!如下:
java.lang.RuntimeException: Could not read input channel file descriptors from parcel.                                                
                    at android.view.InputChannel.nativeReadFromParcel(Native Method)
                    at android.view.InputChannel.readFromParcel(InputChannel.java:148)            
                    at android.view.IWindowSession$Stub$Proxy.addToDisplay(IWindowSession.java:759)
                    at android.view.ViewRootImpl.setView(ViewRootImpl.java:543)
                    at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:313)
                    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:86)
                    at android.widget.Toast$TN.handleShow(Toast.java:434)
                    at android.widget.Toast$TN$1.run(Toast.java:338)
                    at android.os.Handler.handleCallback(Handler.java:739)
                    at android.os.Handler.dispatchMessage(Handler.java:95)
                    at android.os.Looper.loop(Looper.java:148)
                    at android.app.ActivityThread.main(ActivityThread.java:5438)
                    at java.lang.reflect.Method.invoke(Native Method)
                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run
                       (ZygoteInit.java:739)
                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629)

*情景再现:*
这里写图片描述

没错,就是这么个鬼东西,一个电商app的浏览历史。
接口数据如下:
这里写图片描述
(接口数据备注:data:是返回的商品数据的数组,这里需要我传一个page,然后后台一次最多返回10条;cate:浏览历史所包含商品的分类)
提示下:为了方便测试,此项目分为两个环境:内网测试环境和外网测试环境;由于一些原因,内网很多图片都无法加载出来。因此只能使用默认图片。
功能要求:
上面是一个可横向滑动的商品分类栏,可随商品的分类信息变化而变化。下面是一个商品列表,可实现上拉加载,下拉刷新。每次切换分类tab,就会刷新列表。点击右上角的编辑,所有商品及时间左侧会出现一个勾选框,可全选(此处主要讨论这个bug,所以先不详解)。
我的实现:
上面使用recyclerview,下面是自定义的loadMoreListView;
一目了然,想想就觉得简单。可万万没想到,
好嘛,boss来了:
提交测试的时候,居然会报出运行异常的bug(测试人员使用的是小米手机);当然,听到这个bug的时候,我首先还是有点质疑的。于是我再次使用本人的测试机(魅族、vivo、oppo)多次测试,结果并未出现这个异常。于是我换用小米进行测试,果不其然,炸了(当然这里的测试,都是疯狂的点,疯狂的切换,各种考验app的极限。不,是我的极限)。此刻,我很想问候我们的雷老总:“Are you ok?”
这种异常很烦,说炸就炸很不负责任,重点是它还不告诉你错在哪,很过分!!!无助的我只能求助度娘先,可百度到的结果,让我有些无语;大部分的结果的意思是:”我也碰到过这个异常,困扰了我很久,可是一直没有解决。。。。。。。。。。。。”我的天!
当然还是有良心博主的;原谅我找到最接近真相的答案就是:
*1.RemoteView中添加的图片太大了,超过40K会报这个异常;
2.Intent传递的数据太大了超过1M也会报这个错误;
3.FileDescripter太多而且没有关闭,looper太多没有quit;
4.试试在AndroidManefest.xml中对当前Activity配置;
configchange=“orientation|keyboardHidden”(不晓得有没有写对)强制在Activity横竖屏切换的
时候不重新onCreate。
5.谷歌原生BUG很多人都遇到这个问题而且没有得到解决;*
根据自己的代码,可以排除1,2,4;所以我们来看第三点;看到这点,我还是有点亲切的。因为我的报错:是什么open too much files;然后关于第三点,有部分的解释就是由于内存问题,具体哪方面也没说,但说到内存,首先想到的还是图片问题。。
于是,我的bug清除之旅开始了;
1、我关闭了切换分类tab时,刷新列表。———-没闪退;——-那大致就是列表的问题啦!
2、然后审查列表代码,有点复杂,但是由于之前实现过类似的功能,再加上之前百度的原因,所以我认为多半可能性是因为图片的问题。于是我先将图片隐藏设置为默认图片,运行。。多次尝试bug不再重现。好吧,就是图片的问题。综合网上的各种答复,很有可能是缓存的问题,那么问题来了:
我**就是使用的UIL框架,ImageLoader不是设置了缓存的么?啊?啊?于是,我尝试使用其他自带缓存的框架,但结果一样。。
3、经过上一步的核查,我已经接近放弃了。于是,我就去外网测试了一下(祈祷外网不会崩,但如果还会崩的话,也就只能放弃小米了(这种心理要不得,大家不要模仿)),奇迹出现了,app没有崩。
既然如此,问题在哪呢?
外网没问题,内网却炸了。真相只有一个——就是因为内网显示不出来图片,加载的都是默认图片。那么问题近乎可以断定为Imageloader对默认图片的处理!欲知详情,请自行百度!(好嘛,是我自己没太搞明白那些源码,也不能在此误人子弟。如有大神了解,还望不吝赐教!!!)

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值