You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Android Studio真机环境下UI测试无法启动问题求助

真机UI测试无法启动:Activity停在PRE_ON_CREATE状态的解决方案

我之前做Android UI测试时也碰到过完全一样的问题——模拟器上测试跑起来毫无压力,真机功能调试也正常,唯独UI测试一启动就报Activity生命周期异常。结合你的报错信息和代码片段,给你几个实用的排查和解决方向:

  • 检查真机的系统设置与权限
    先确认真机「开发者选项」里的**「不保留活动」**是关闭状态,这个选项会强制Activity在后台被销毁,直接导致测试无法捕获正常的生命周期状态。另外,测试应用需要的权限(比如存储、位置等)要确保已授予,最好在测试代码里用GrantPermissionRule自动授权,避免手动授权遗漏:

    @get:Rule
    val grantPermissionRule = GrantPermissionRule.grant(
        android.Manifest.permission.READ_EXTERNAL_STORAGE,
        android.Manifest.permission.WRITE_EXTERNAL_STORAGE
        // 根据你的测试需求添加其他权限
    )
    
  • 排查SplashActivity的初始化逻辑
    报错显示Activity停在PRE_ON_CREATE,说明Activity还没进入onCreate就卡住了。检查SplashActivity的onCreate方法里有没有耗时操作(比如主线程做网络请求、大文件IO),或者依赖了模拟器特有的环境(比如模拟器自带的测试服务、虚拟硬件),这些在真机上会导致初始化失败,进而阻塞生命周期流转。

  • 延长测试超时时间
    真机的性能通常比模拟器波动更大,默认的测试超时时间可能不够。你可以手动给ActivityScenario设置更长的超时:

    ActivityScenario.launch(SplashActivity::class.java).use { scenario ->
        // 延长到10秒等待Activity进入RESUMED状态
        scenario.waitForActivityToBecomeAnyOf(Lifecycle.State.RESUMED, 10L, TimeUnit.SECONDS)
    }
    

    或者用ActivityScenarioRule配合@Timeout注解调整全局测试超时。

  • 核对测试依赖版本
    确保androidx.test.coreandroidx.test.runnerandroidx.test.ext.junit这些测试库的版本和你的项目compileSdk、targetSdk版本匹配。版本不兼容很容易导致真机上的生命周期管理出现异常,建议统一使用最新的稳定版测试库。

  • 禁用Instant Run/Apply Changes
    Android Studio的即时运行功能有时候会在真机上导致测试APK的状态异常,关闭这个功能后,重新构建并安装测试APK,再运行测试试试。


内容的提问来源于stack exchange,提问作者Евгений Иванов

火山引擎 最新活动