最近在开发过程中遇到的Bug,很揪心啊,就是下面的这2句
GSL MEM ERROR: kgsl_sharedmem_alloc ioctl failed
OpenGLRenderer: GL error: Out of memory
定位了一个礼拜,百度了好多,也问了许多人,却基本上没有答案,有的人说OOM啊,快去检查内存问题;
有人说,这是底层问题,很难找;最后还是在stackflow上找到的,大概的意思就是在绘制View的时候导致OOM(个人理解),接着往下看就是,开启了硬件加速(不知道的自行百度),因为我在全局开启了硬件加速导致的疯狂绘制,然后OOM了,而且导致出错的是View就是CircleImageView(圆形图片) ,因为开启硬件加速会有很多好处,比如RecycleView滑动会很流畅,动画执行也会很流畅。废话说多了
之前说到CircleImageView(圆形图片) 出的错,那就得解决啊,在测试的时候,我们并没有发现有这样的Bug,这样的Bug也是在历经了2-3版本才被定位到的(至今未解决),因为不同的机型,出现的情况也不一样,比如OPPO R9S就不会出问题,但是OPPO R9 Plus就会出问题(都是公司的测试机),然后我就强行关闭了全局的硬件加速,结果导致动画走的特别慢(pass);CircleImageView我就单独关掉它的,然后后面就会有一层黑色阴影,(pass);后来我就尝试换掉CircleImageView,百度一波全是一样的代码(为啥不自己写,因为不会~哈哈);看来放大招了,后来我发现能替换的就是Facebook开源的代码Fresco(一款加载图片的框架),这个就可以,然后我就改啊改啊,因为这个图片框架挺大的,我就想着把原先的图片框架给替换掉,妈的,发现这个 Fresco代码入侵太恐怖了,(建议不是对图片有特别高要求不要使用),然后就还原代码了;然后就没有然后了,当然在这个过程中,修复了不少内存泄露的地方,然后稍微的修改了下圆形的图片;
1.解决办法,替换CircleImageView(前提是你得有更好的)这个控件在很多情况下都是可以的,只是我们APP的那个界面用的太多
下一篇讲讲Fresco的用法吧