2011-01-27 2 views
5

У меня есть активность, которая должна сохранять свои данные в случае, если система решает убить ее, когда она находится в фоновом режиме. Таким образом, я получил onSaveInstanceState:Проверка жизненного цикла Android-активности

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

проверить, является ли нулевой объект Bundle в 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

+0

Я прошел через него, но моя проблема, кажется, немного сложнее –

6

Вы можете использовать некоторые скрытые функциональные возможности API. В настройках вашего теста, вызовите метод

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

посредством отражения (потому что это скрытый API) и убедитесь, что значение было успешно установлено с помощью

android.provider.Settings.System.getInt(getContentResolver(), Settings.System.ALWAYS_FINISH_ACTIVITIES, 0) 

Затем в тестовой очистки, установите значение этого параметра к ложному.

Включение настройки AlwaysFinish приводит к тому, что система уничтожает действия, как только они больше не отображаются на экране, сразу же запуская событие onSaveInstanceState. Чтобы этот код работал, вам понадобятся разрешения ALWAYS_FINISH и WRITE_SETTINGS.

Смотрите код для инструмента SetAlwaysFinish связан в этом блоге: How to test onSaveInstanceState and onRestoreInstanceState on a real device

+0

Спасибо, что приняли время, чтобы поставить это вместе Тео. Хорошая работа! – ohhorob

+0

Я не мог заставить setAlwaysFinish.apk работать на Android 4.0.3. Он запустился, но проверка флажка не имела никакого эффекта. Просто предупреждение. Если onCreate is NOT вызванный после того, как деятельность должна быть закончена, setAlwaysFinish не выполняет эту работу. – Nilzor

1

Для ручного тестирования, эта процедура работ:

  1. Launch активности вы хотите проверить
  2. Нажмите кнопку меню домой на вашем устройстве (деятельность прекращена)
  3. Убить этот процесс от DDMS (активная деятельность not destroyed)
  4. Верните свое приложение снова из recent apps list

Это должно вызвать onCreate снова на вашей деятельности в то время как не перезапуска всего приложения. Если вы не сохраните и не загрузите состояние должным образом, вы скоро узнаете.

Смежные вопросы