Android Activity生命周期测试

Igo*_*pov 6 android unit-testing

我有Activity,这是为了保存它的数据,以防系统决定在它在后台时杀死它.所以,我有onSaveInstanceState:

@Override
protected void onSaveInstanceState(Bundle outState){
    outState.putString("value", "some_value");
}
Run Code Online (Sandbox Code Playgroud)

我在onCreate中检查Bundle对象是否为null:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    isRestarted=(savedInstanceState==null);
Run Code Online (Sandbox Code Playgroud)

我该如何编写测试方法?我试过了

    public void testRecreate(){
    Instrumentation mInstr=this.getInstrumentation();
    mInstr.callActivityOnSaveInstanceState(mActivity, null);
    mActivity.finish();
    mActivity=this.getActivity();
    assertEquals(false, mActivity.isRestarted);
}
Run Code Online (Sandbox Code Playgroud)

但似乎是错的.

The*_*heo 6

您可以使用一些隐藏的API功能.在您的测试设置中,请致电

android.app.ActivityManagerNative.getDefault().setAlwaysFinish()
Run Code Online (Sandbox Code Playgroud)

方法通过反射(因为它是一个隐藏的API)并确认使用了成功设置的值

android.provider.Settings.System.getInt(getContentResolver(), Settings.System.ALWAYS_FINISH_ACTIVITIES, 0)
Run Code Online (Sandbox Code Playgroud)

然后在测试清理中,将此设置设置为false.

启用该AlwaysFinish设置会导致系统在屏幕上不再显示活动时立即销毁,立即触发onSaveInstanceState事件.要使此代码有效,您将需要ALWAYS_FINISHWRITE_SETTINGS权限.

请参阅此博客中链接的SetAlwaysFinish工具的代码:如何在真实设备上测试onSaveInstanceState和onRestoreInstanceState


use*_*209 0

如果您以前没有经历过,我发现至少值得这样做一次。