活动永远不会变成请求的状态“[DESTROYED、RESUMED、STARTED、CREATED]”(最后一个生命周期转换=“PRE_ON_CREATE”)

问题描述 投票:0回答:7

这不是一个重复的问题。
我已经看过类似的问题。我已经添加了我上次提到的问题。

我的问题是测试执行了,但我必须为每个测试手动打开应用程序。

你可以看到我等了18秒才打开应用程序。它会等到我手动打开应用程序或超时后显示此错误。

活动永远不会变成请求的状态“[DESTROYED、RESUMED、STARTED、CREATED]”(最后一个生命周期转换=“PRE_ON_CREATE”)

这篇文章,我认为问题出在我正在使用的设备上

Redmi Note 5

我有
disabled animations
以及
MIUI optimization
选项。

感谢您提供在小米设备上自动运行测试的帮助。

手动运行自动化 UI 测试没有意义。

更新1
它仅针对启动器/主要活动执行。
它不适用于其他活动。

更新2
我也碰巧有一台 Redmi 4。测试按预期在该设备上运行,无需更改任何代码。

提到的SO问题

以及相关问题,

为任何想要查看的人添加代码片段和依赖项,

测试代码

import androidx.test.core.app.ActivityScenario
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.assertion.ViewAssertions.matches
import androidx.test.espresso.matcher.ViewMatchers.*
import androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner
import org.junit.Test
import org.junit.runner.RunWith

@RunWith(AndroidJUnit4ClassRunner::class)
class MainActivityTest {
    @Test
    fun test_isActivityInView() {
        val activityScenario = ActivityScenario.launch(MainActivity::class.java)
        onView(withId(R.id.layout_activity_main)).check(matches(isDisplayed()))
    }
}

依赖关系

testImplementation "junit:junit:4.13.2"
androidTestImplementation "androidx.test:core:1.4.0"
androidTestImplementation "androidx.test:runner:1.4.0"
androidTestImplementation "androidx.test:rules:1.4.0"
androidTestImplementation "androidx.test.ext:junit-ktx:1.1.3"
androidTestImplementation "androidx.test.espresso:espresso-core:3.4.0"
android android-espresso xiaomi
7个回答
23
投票

这是权限问题。只需在您的 Android 手机设置中允许此应用程序自动启动弹出窗口即可。

然后启动 USB 调试并允许测试应用程序chain-start

它对我来说在小米11青春版上有效。

您可以在设置->应用程序->管理应用程序中找到这些设置 ->您的应用程序->权限


9
投票

我也有同样的问题。 有时会因为使用而出现问题

androidTestImplementation 'androidx.fragment:fragment-testing:1.3.6'

而不是

debugImplementation 'androidx.fragment:fragment-testing:1.3.6'

如果您的测试场景中有片段,请使用

debugImplementation
添加此依赖项,然后再次检查。 感谢这篇文章的回答。


5
投票

我在 Android 11 设备上遇到以下错误

java.lang.AssertionError:活动永远不会变为请求状态“[STARTED、RESUMED、CREATED、DESTROYED]”(最后一个生命周期转换=“PRE_ON_CREATE”)

我在这上面浪费了大量时间,当我将设备切换到 Android 10 时找到了解决方案。

如果有人遇到此类问题,请执行以下操作来解决它,

  1. 在应用程序设置中启用自动启动
  2. 从应用程序权限设置中授予“在后台运行时显示弹出窗口”的权限

1
投票

我正在使用 API 30 的虚拟 Pixel 2 中进行测试。“设置”中没有“自动启动”或“弹出”选项。简而言之,此消息表示无法打开该 Activity,因此如果您在虚拟设备或真实设备中手动打开您的应用程序,测试将运行。


0
投票

我的问题是,我的 Android 11 Redmi Note 10s 上有一个更新正在等待我,在更新并执行其他建议的答案后,它起作用了!


0
投票

检查是否在

getIntent().setAction()
方法上调用了
onCreate
,如果是则将其删除。

这就是我在我的案例中“解决”的方法。


0
投票

就我而言,我测试了 Compose 片段以及普通片段。我添加了库

androidTestImplementation("androidx.compose.ui:ui-test-junit4:1.6.0")
debugImplementation("androidx.compose.ui:ui-test-manifest:1.6.0")

在测试中我添加了规则:

@get:Rule
val activityRule = ActivityTestRule(MainActivity::class.java, true, false)

@get:Rule
val composeTestRule = createAndroidComposeRule<MainActivity>()

然后开始测试:

@Before
open fun setUp() {
    activityRule.launchActivity(null)
}

并得到此异常:“java.lang.AssertionError:活动永远不会变为请求状态“[DESTROYED]”(最后一个生命周期转换=“PAUSED”)”。

然后我将一条规则替换为:

@get:Rule
val composeTestRule = createComposeRule()
© www.soinside.com 2019 - 2024. All rights reserved.