为了在配置更改时保留 AsyncTasks,我使用基于片段的解决方案和 setRetainInstance(true),它托管每个 AsyncTask 并回调侦听 Activity,类似于此解决方案http://www.androiddesignpatterns.com/2013/04/retaining-objects-across-config-changes.html http://www.androiddesignpatterns.com/2013/04/retaining-objects-across-config-changes.html
最终,目的是使用 Robolectric 在整个配置更改过程中测试 AsyncTask 的保留功能,但我需要从正确设置实际的配置更改开始。但是,我似乎无法模仿配置更改期间发生的确切参考行为。
真实应用程序:当运行真实的应用程序时,在配置更改时,活动将被销毁并重新创建,而片段将被保留,因此它似乎正在工作。我可以通过检查配置更改之前和之后的参考来看到这一点(下面使用的示例参考):
Case 1:然而,当在 Robolectric 测试中的 Activity 上运行 recreate() 时,该 Activity 似乎没有正确重新创建其实例(尽管文档说该方法执行所有生命周期调用):
mActivityController =
Robolectric.buildActivity(AsyncTaskTestActivity.class).attach().create().start().resume().visible();
mActivity = mActivityController.get();
mActivity.recreate();
这使我相信新的 Activity 实例未正确创建,因此重新附加功能并未真正发生。
Case 2:如果我根据各个生命周期调用创建测试:
mActivityController = Robolectric.buildActivity(AsyncTaskTestActivity.class).attach().create().start().resume().visible();
mActivityController.pause().stop().destroy();
mActivityController = Robolectric.buildActivity(AsyncTaskTestActivity.class).attach().create().start().resume().visible();
在这个版本中,似乎 Activity 被从头开始完全替换,但 Fragment 也是如此:
看来我要么重用相同的 Activity(情况 1),要么用新实例替换所有内容,就好像没有底层应用程序保留 Fragment(情况 2)一样。
问题:有什么方法可以设置我的 Robolectric 测试来模拟在实际 Android 环境中运行应用程序时获得的参考结果(根据真实应用程序结果),或者我是否坚持创建一个单独的测试应用程序或解决与 Robotium 功能测试?我试着这样做https://stackoverflow.com/a/26468296 https://stackoverflow.com/a/26468296但得到了与我的案例2相同的结果。
提前致谢!