gpt4 book ai didi

android - 如何使用 savedInstanceState 测试 Activity kill -> oncreate 生命周期

转载 作者:行者123 更新时间:2023-11-28 21:05:28 27 4
gpt4 key购买 nike

我尝试编写一个仪器测试来测试我的 Activity 被终止的 Activity 生命周期,它的实例状态被保存,然后用这个实例状态重新创建。

我可以通过在我的设备的开发人员设置中将后台进程限制限制为“无后台进程”来手动测试此行为,但我希望能够进行自动化测试以证明我的 Activity 可以重新创建。

我的 Activity 有一个 ID 为 R.id.content_frame 的 fragment 。

所以我有这个:

public class MainActivityInstrumentationTest extends ActivityInstrumentationTestCase2<MainActivity> {

public void testKillCreateLifeCycleWithProfileFragment() throws Throwable {

final Activity activity = getActivity();

navigateToProfile(activity);
Thread.sleep(5000);
runTestOnUiThread(new Runnable() {
@Override
public void run() {
activity.recreate();
}
});
getInstrumentation().waitForIdleSync();
Thread.sleep(5000);
assertProfileFragmentIsVisible((FragmentActivity) activity);
}

private void assertProfileFragmentIsVisible(FragmentActivity activity) {
FragmentManager supportFragmentManager = activity.getSupportFragmentManager();
Fragment currentFragment = supportFragmentManager.findFragmentById(R.id.content_frame);
assertEquals(ProfileFragment.class.getName(), currentFragment.getClass().getName());
}

}

activity.recreate 遍历所有实时循环回调方法并使用保存的包最终调用 onCreate 但我的 assertProfileFragmentIsVisible 方法中的 fragmentManager 不包含任何 fragment 。

我也不确定使用 activity.recreate 是否是正确的方法。我尝试了许多其他方法,例如使用 getInstrumentation().callActivityOn... 手动调用每个生命周期方法,但最终发现无法使用保存的包创建 Activity ..

如有任何关于如何创建此类仪器测试的想法,我们将不胜感激!

问候弗兰克

最佳答案

以防万一有人对我的最终解决方案感兴趣:

问题是我将对旧 Activity 的引用放到 assertProfileFragmentIsVisible 中。但是 activity.recreate() 创建了一个新的 Activity 实例。问题仍然是如何获得此引用。

我设法通过使用 ActivityMonitor 获得了对新 Activity 的引用。

所以我的完整测试现在看起来如下:

public void testKillCreateLifeCycle() throws Throwable {
Instrumentation.ActivityMonitor mainActivityMonitor = new Instrumentation.ActivityMonitor(MainActivity.class.getName(), null, false);
getInstrumentation().addMonitor(mainActivityMonitor);

final Activity activity = getActivity();
mainActivityMonitor.waitForActivityWithTimeout(5000);

navigateToFragment(activity);

runTestOnUiThread(new Runnable() {
@Override
public void run() {
activity.recreate();
}
});
getInstrumentation().waitForIdleSync();

Activity newActivity = mainActivityMonitor.getLastActivity();
assertFragmentIsVisible((FragmentActivity) newActivity, getExpectedFragment());
}

关于android - 如何使用 savedInstanceState 测试 Activity kill -> oncreate 生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16362786/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com