我尝试编写一个仪器测试来测试我的活动被杀死的活动生命周期,它的实例状态被保存,然后用这个实例状态重新创建。
我可以通过在我的设备的开发人员设置中将后台进程限制限制为“无后台进程”来手动测试此行为,但我希望能够进行自动化测试来证明我的活动可以重新创建。
我的活动有一个 ID 为 R.id.content_frame 的片段。
所以因为我有这个:
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 不包含任何片段。
另外我不确定是否使用 activity.recreate 是正确的方法。我尝试了许多其他方法,例如手动调用每个生命周期方法,getInstrumentation().callActivityOn...
但最终发现无法使用保存的包创建活动。
任何关于如何创建这样的仪器测试的想法将不胜感激!
问候弗兰克