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 说明。

从较小范围的处理开始

可以按以下顺序排查:

  1. 停止应用进程,确认重新启动是否仍能复现。
  2. 检查当前构建产物与模拟器中安装的版本是否一致。
  3. 在可以丢弃数据的测试设备中,比较重新安装前后的现象。
  4. 若问题再次出现,回到第一处具体异常,继续检查应用生命周期和系统兼容性。

每次只改变一项条件,才能知道恢复与哪个变化有关。重启进程、清除数据、卸载重装改变的范围不同,不应混成同一个操作。

卸载会改变什么

卸载通常会清除该应用在设备上的本地数据,因此先备份需要保留的测试资料,核对目标包,再操作。不要为了排查一次启动失败,直接擦除整个 AVD。

重装可能同时改变应用数据、安装状态和进程环境。所以即便恢复,也不能仅凭这个结果认定是内存泄漏、数据库损坏或某个引擎缺陷。把处理结果与根因判断分开,才能让这类偶发问题记录对下一次排查仍有帮助。