请选择 进入手机版 | 继续访问电脑版

android:hardwareAccelerated=“false“属性慎用

[复制链接]
钟启航 发表于 2021-1-1 18:30:03 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
记载一下这两天找bug的心田履历。

问题背景:
客户:我们APP中,想集成进AI测肤的功能,实时检测人的肤质状况,并给出公道化发起。
经理:好的。
需求调研:
选择了美图作为互助方,用他们的现成产物。
项目集成:
美图提供了Android和IOS的SDK,开发人员摆好姿势,准备集成。
对于开发老手来说,集成的速度照旧比较快的。但是希奇的事情发生了:集成后,Android端的效果页面是异常的卡顿,而IOS端却很丝滑。
问题分析:

  • 效果页面,实在就是用的原生的WebView加载H5页面,照理说不应该会有卡顿现象。
     
  • 对方给的demo跑起来却是正常的,但集成到项目里就是不可。
  • 于是判定:
    会不会是集成进来的文件,与我们项目自己的文件有些辩论,导致了加载慢的问题。
  • 询问过美图之后,对方发起是不是项目有内存泄漏等问题,确实,在webview中容易出现内存泄漏的问题。
    但在事后但排查中,发现一直走了弯路。

此时,不信邪的耿直步调员性格出现了。
首先,我们新建了一个空缺的工程,然后一步步集成sdk后,发现效果正常。
那就只能猜疑是项目中是否有什么特殊配置导致的问题。
于是,单独拷出来项目,一点点去调试。
调试的过程中,履历过无数的期盼、失望、重头再来。
我的心田险些要瓦解了,wwwwww。
 
调试的时候,也有本领:

  • 先删除那些你认为肯定不会影响此业务的包,等编译通事后,再一点点删除其它的包。
     
  • 在项目标启动项去直接打开集成的sdk,发现照旧有问题。
  • 最终定位到AndroidManifest.xml中的一行代码的问题。
android:hardwareAccelerated="false"
把这个属性,改为ture后,居然神奇的变好了!
赶紧看看这属性到底是干嘛的?
功能:启动硬件加速
缺点:占用内存
特点:可以在Application、Activity、Window、View四个级别举行硬件加速控制
从Android3.0(API Level 11)开始,Android 2D渲染管道可以或许更好的支持硬件加速。硬件加速执行的所有的绘图操作都是使用GPU在View对象的画布上来举行的。因为启用硬件加速会增加资源的需求,因此这样的应用会占用更多的内存。
启用硬件加速的最容易的方法是给整个应用步调都打开全局硬件加速功能。如果应用步调只使用标准的View和Drawable,那么打开全局硬件加速不会导致任何的不良的绘制效果。但是,因为硬件加速并不支持所有的2D图形绘制操作,所以对于那些使用定制的View和绘制调用的应用步调来说,打开全局硬件加速,可以会影响绘制效果。问题通常会出现在对那些不可见的元素举行了异常或错误的像素渲染。
这两个属性通常配合一起使用:
  1. android:hardwareAccelerated="false"android:largeHeap="true"
复制代码
largeHeap="true"表示可以让应用能申请使用更多的内存,最初做项目时,引导页面的ViewPager报了OOM异常,图片并不大,于是加上了上面两行代码,解决了问题。但并没有深究其意义,果然欠下的技术债早晚要还的。

来源:https://blog.csdn.net/handingnihao/article/details/111946324
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )