2016-02-29 2 views
1

В приведенной ниже таблице вы можете заметить, что в результате разрушения действия вызывается onRestoreInstanceState представления. Почему это необходимо?Почему onRestoreInstanceState вызывает просмотр при уничтожении активности?

at com.mypackage.MyView.onRestoreInstanceState(Unknown Source) 
    at android.view.View.dispatchRestoreInstanceState(View.java:13758) 
    at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2889) 
    at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2895) 
    at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2895) 
    at android.view.View.restoreHierarchyState(View.java:13736) 
    at android.support.v4.app.Fragment.restoreViewState(Unknown Source) 
    at android.support.v4.app.FragmentManagerImpl.moveToState(Unknown Source) 
    at android.support.v4.app.FragmentManagerImpl.moveToState(Unknown Source) 
    at android.support.v4.app.FragmentManagerImpl.moveToState(Unknown Source) 
    at android.support.v4.app.FragmentManagerImpl.dispatchReallyStop(Unknown Source) 
    at android.support.v4.app.FragmentActivity.onReallyStop(Unknown Source) 
    at android.support.v4.app.FragmentActivity.doReallyStop(Unknown Source) 
    at android.support.v4.app.FragmentActivity.onDestroy(Unknown Source) 
    at android.support.v7.app.o.onDestroy(Unknown Source) 
    at android.app.Activity.performDestroy(Activity.java:6189) 
    at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1164) 
    at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3778) 
    ... 10 more 

EDIT:

View.onRestoreInstanceState получает все, что View.onSaveInstanceState производства. В документации для onSaveInstanceState говорится: «Крюк, позволяющий представлению создать представление своего внутреннего состояния, которое впоследствии может быть использовано для создания нового экземпляра с таким же состоянием». - Когда выполняется onDestroy, нет необходимости воссоздавать представления, поэтому почему называется onRestoreInstanceState?

+0

В чём вы Android-версия? – barq

+0

А что такое Исключение? – barq

+0

Исключение не имеет значения. Версия Android от Android 4.0.3 до Android 5.1. Это конкретный вариант: Moto X (gen2) (victara) в соответствии с консолью разработчика Google Play. – aleb

ответ

0

onRestoreInstanceState вашего фрагмента происходит в рамках onDestroy вашей деятельности.

Это поведение в FragmentManagerImpl:

void moveToState(Fragment f, int newState, int transit, int transitionStyle, boolean keepActive) { 
    //... 
    case Fragment.CREATED: 
    if (newState > Fragment.CREATED) { 
    //... 
     f.performActivityCreated(f.mSavedFragmentState); 
     if (f.mView != null) { 
      f.restoreViewState(f.mSavedFragmentState); 
     } 
     f.mSavedFragmentState = null; 
    } 
} 

Если состояние фрагмента изменяется (перемещен) и вид фрагмента не является нулевым, тогда restoreViewState всегда вызывается как часть этого процесса.

Возможно, вы не звоните super.onDestroy() в качестве первого заявления в onDestroy?

+0

View.onRestoreInstanceState получает все созданные View.onSaveInstanceState. В документации для onSaveInstanceState говорится: «Крюк, позволяющий представлению создать представление своего внутреннего состояния, которое впоследствии может быть использовано для создания нового экземпляра с таким же состоянием». - Когда выполняется onDestroy, нет необходимости воссоздавать представления, так почему же вызывает вызов View.onRestoreInstanceState? Не могли бы вы подробно рассказать о своем ответе, спасибо! – aleb

+0

В чем вопрос? – barq

+0

Возможно, вы не называете 'super.onDestroy()' первым заявлением в 'onDestroy'? – barq

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