2011-01-27 101 views
5

我有活動,即保存其數據以防系統在後臺處理時終止它。 所以,我的onSaveInstanceState了:Android活動生命週期測試

@Override 
protected void onSaveInstanceState(Bundle outState){ 
    outState.putString("value", "some_value"); 
} 

我檢查包對象是否爲空在的onCreate:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    isRestarted=(savedInstanceState==null); 

如何編寫測試方法?我試過

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

但它似乎是錯誤的。

回答

0

如果你以前沒有經歷過,我發現它至少有一次值得do this

+0

http://developer.android.com/resources/tutorials/testing/activity_test.html =>斷開鏈接:( – Macarse 2011-01-27 13:23:39

+0

我已經通過它,但我的問題似乎有點複雜 – 2011-01-27 14:19:53

6

您可以使用一些隱藏的API功能。在測試的設置,通過反射調用

android.app.ActivityManagerNative.getDefault().setAlwaysFinish() 

方法(因爲它是一個隱藏的API),並確認該值已成功設置使用

android.provider.Settings.System.getInt(getContentResolver(), Settings.System.ALWAYS_FINISH_ACTIVITIES, 0) 
在測試清理

然後,將該設置回假。

啓用AlwaysFinish設置會導致系統立即銷燬活動,立即觸發onSaveInstanceState事件。要使此代碼生效,您需要ALWAYS_FINISHWRITE_SETTINGS權限。

見本博客鏈接的SetAlwaysFinish工具的代碼:How to test onSaveInstanceState and onRestoreInstanceState on a real device

1

對於手動測試,這個程序的工作原理:

  1. 啓動您要查看的活動來測試
  2. 擊中主菜單按鈕(活動已停止)
  3. DDMS(活動仍爲not destroyed
  4. recent apps list

再次帶回你的應用程序這應該對你的活動再次觸發onCreate重新啓動整個應用程序。如果你沒有妥善保存和加載狀態,你會很快知道。