2018 年在模拟器运行 Android 项目时,遇到过这样的错误:
java.lang.IllegalArgumentException:
reportSizeConfigurations: ActivityRecord not found for: Token{...}
at android.app.ActivityManagerProxy.reportSizeConfigurations(...)
at android.app.ActivityThread.reportSizeConfigurations(...)
at android.app.ActivityThread.handleLaunchActivity(...)
当时搜索到的讨论提到内存泄漏,但没有找到能对应项目的完整处理方法。后来卸载模拟器里上次安装的应用,重新安装运行,错误没有继续出现。
这条记录的有效经验是“重新安装后恢复”,不是已经证明某处内存泄漏被修复。
先保留出错现场
重装之前,保存错误前后的 Logcat,而不只是最外层这一行。记录模拟器镜像、系统 API 级别、应用构建版本,以及错误出现在启动、切换页面还是旋转屏幕时。
还应确认当前设备和应用包名,避免调试器、安装目标和日志窗口指向不同的模拟器或不同版本。查看异常及业务调用栈的方法见 Android Logcat 说明。
从较小范围的处理开始
可以按以下顺序排查:
- 停止应用进程,确认重新启动是否仍能复现。
- 检查当前构建产物与模拟器中安装的版本是否一致。
- 在可以丢弃数据的测试设备中,比较重新安装前后的现象。
- 若问题再次出现,回到第一处具体异常,继续检查应用生命周期和系统兼容性。
每次只改变一项条件,才能知道恢复与哪个变化有关。重启进程、清除数据、卸载重装改变的范围不同,不应混成同一个操作。
卸载会改变什么
卸载通常会清除该应用在设备上的本地数据,因此先备份需要保留的测试资料,核对目标包,再操作。不要为了排查一次启动失败,直接擦除整个 AVD。
重装可能同时改变应用数据、安装状态和进程环境。所以即便恢复,也不能仅凭这个结果认定是内存泄漏、数据库损坏或某个引擎缺陷。把处理结果与根因判断分开,才能让这类偶发问题记录对下一次排查仍有帮助。