主要观点总结
文章介绍了在Android开发中如何规避因大图导致OOM的问题,通过动态检测大图并给出警告,避免了因开发者未规范处理大图而导致的线上用户问题。文章详细阐述了如何在ImageView的setImageDrawable方法中插入字节码插桩,实现了大图的检测,并介绍了如何对系统jar包进行插桩和替换,以及如何获取容器的宽高来确保准确的检测结果。
关键观点总结
关键观点1: 大图导致OOM的问题
在Android开发中,大图可能导致OOM,因此需要找到一种方法规避这个问题。
关键观点2: 大图检测的实现方式
通过在ImageView的setImageDrawable方法中插入字节码插桩,实现了大图的检测,并给出了解决方案。
关键观点3: 系统jar包的插桩和替换
文章介绍了如何对系统jar包进行插桩和替换,以便在运行时检测大图。
关键观点4: 获取容器宽高的方法
为了确保准确的检测结果,建议在ImageView的post方法中获取容器的宽高。
关键观点5: 解决方案的应用场景
该解决方案适用于所有在Android开发中需要处理图片的场景,可以帮助开发者避免大图导致的OOM问题。
文章预览
本文作者 作者: layz4android 链接: https://juejin.cn/post/7219908995338223671 本文由作者授权发布。 在实际的项目开发中,引入图片的方式基本可以分为两种:本地图片和云端图片,对于云端图片来说,可以动态地配置图片的大小,如果服务端的伙伴下发的图片很大导致程序异常,那么可以随时修改端上无法发版修复。但是因为本地引入的图片,e.g. 背景图,位图 过大导致程序出现异常,则必须要紧急发版修复线上用户问题。 其实在开发过程中是可以规避这个问题的,只不过是少了一个check的过程,而且大部分因为开发过程中不规范导致问题的发生,UI切图的不规范,或者开发者没有在意尺寸大小而随意引入到工程中。因为开发中可能频繁的installDebug,一些内存问题并不会发现,而到了线上之后,在用户场景中可能就会出现。 我们都知道,大图是导致OOM的
………………………………