升级Android Studio 3.1与Gradle 4.4后点击EditText触发ANR崩溃
我之前也踩过这个升级后的坑!把Android Studio升到3.1、Gradle更到4.4后,点击EditText触发多次GC最终栈溢出崩溃的情况,在当时的版本迭代里挺常见的,主要和输入法服务兼容性、Gradle编译优化逻辑冲突有关,给你几个实测有效的排查和解决方向:
禁用Gradle的增量编译优化
升级后Gradle默认开启的增量编译优化,有时候会和输入法的视图绑定逻辑产生冲突。你可以在项目根目录的gradle.properties文件中添加以下配置:android.enableBuildCache=false android.enableIncrementalJavaCompilation=false之后执行Clean Project再Rebuild,看看GC频繁的情况是否有所缓解。
排查自定义EditText或输入法相关逻辑
如果项目里有自定义的EditText子类,或者重写了onTouchEvent、onFocusChanged这类和交互相关的方法,很可能在版本升级后出现递归调用的问题。比如某些监听焦点变化的代码中,不小心又触发了焦点请求,导致无限循环,最终撑爆栈内存。建议给这类自定义逻辑加日志或者断点,跟踪调用栈找出循环点。切换/更新输入法相关依赖
如果集成了第三方输入法SDK或者自定义键盘,升级Gradle后可能出现兼容性问题。可以先临时切换到系统默认输入法测试,如果问题消失,就需要把第三方输入法SDK更新到适配Gradle 4.4的版本。升级Gradle到更高稳定版本(推荐)
当时官方在后续的Gradle补丁版本(比如4.6及以上)里修复了不少这类兼容性bug。如果项目允许的话,建议直接把Gradle升级到4.6或者5.x的稳定版本,同时配合Android Studio 3.2+使用,这类问题大概率会被官方修复。临时调整虚拟机堆大小(应急方案)
这个方法只能临时缓解栈溢出问题,不推荐长期使用。你可以在模块的build.gradle的android块中添加堆大小配置:android { defaultConfig { // 调整最大堆内存 javaMaxHeapSize "4g" } }
内容的提问来源于stack exchange,提问作者Swapnil

