2015-08-23 6 views
2

Я хочу сохранить значение textView, когда приложение переходит в onPause. поэтому я реализовал onSaveInstanceState и onRestoreInstanceState. но как показано ниже в выводе logcat, onRestoreInstanceState никогда не вызывается.onRestoreInstanceState не получает вызов

Я знаю, что как onRestoreInstanceState, так и onSaveInstanceState не являются частью жизненного цикла приложения, поэтому почему onSaveInstanceState получает вызов, а onRestoreInstanceState - нет? и как вызвать onRestoreInstanceState?

код:

@Override 
protected void onResume() { 
    // TODO Auto-generated method stub 
    super.onResume(); 
    Log.w(TAG, LogAnd.i("onResume", "")); 

    btAdapter = BluetoothAdapter.getDefaultAdapter(); 
    if (btAdapter == null) { 
     tvStatus.setText("[" + SysUtils.getDeviceName() + "] no Bluetooth installed."); 
    } else { 
     tvStatus.setText("[" + SysUtils.getDeviceName() + "] Bluetooth installed."); 
    } 
} 

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    // TODO Auto-generated method stub 
    super.onSaveInstanceState(outState); 
    Log.w(TAG, LogAnd.i("onSaveInstanceState", "")); 

    outState.putString("statusText", tvStatus.getText().toString()); 
} 

@Override 
protected void onRestoreInstanceState(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onRestoreInstanceState(savedInstanceState); 
    Log.w(TAG, LogAnd.i("onRestoreInstanceState", "")); 

    String status = savedInstanceState.getString("statusText"); 
    tvStatus.setText(status); 
} 

LogCat:

08-23 18:36:31.544: W/MainActivity(32195): -> onResume: 
08-23 18:36:31.904: W/MainActivity(32195): -> onPause: 
08-23 18:36:32.694: W/MainActivity(32195): -> onSaveInstanceState: 
08-23 18:36:34.014: W/MainActivity(32195): -> onResume: 
08-23 18:36:42.904: W/MainActivity(32195): -> onPause: 
08-23 18:36:43.784: W/MainActivity(32195): -> onSaveInstanceState: 
08-23 18:36:43.784: W/MainActivity(32195): -> onStop: 
08-23 18:36:50.084: W/MainActivity(32195): -> onStart:BT-Receiver Registered 
08-23 18:36:50.084: W/MainActivity(32195): -> onResume: 
+0

, пожалуйста, проверьте мой ответ. –

ответ

1

onRestoreInstanceState() вызывается только после onStart() и поэтому он не вызывается после onResume(). Проверьте этот полный жизненный цикл деятельности.

enter image description here

Я надеюсь, что это помогает!

+0

такой же аспект, как http://stackoverflow.com/questions/24130726/why-isnt-onrestoreinstancestate-called-after-onstart. Как загрузить состояние, если мы просто нажимаем на кнопку «домой», а не обратно на приложение? Приложение не убивается в этом случае, но данные теряются ... –

0

Как the official reference говорит о onSaveInstanceState:

Этот метод вызывается перед тем, как активность может быть убит

Если есть возможность для Activity быть убитым, onSaveInstanceState будет называться regardress на самом деле это будет убито или нет.

Пока onRestoreInstanceState вызывается, когда фактическиActivity был убит.

Поэтому, если фактически Activity не был убит, onRestoreInstanceState не вызывается.

Таким образом, может возникнуть асимметрия между onSaveInstanceState и onRestoreInstanceState. Если вы хотите, чтобы вас звали onRestoreInstanceState, вы должны обязательно убить Activity.

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