2017-02-07 2 views
0

У меня была ситуация, когда onDestroy пожары сразу после onSaveInstanceState.Does onDestroy void пакет onSaveInstanceState?

Будет ли среда выполнения (Dalvik) сохранить копию набора bundle в onSaveInstanceState, и передать его обратно в onCreate?

Или, является bundle null/void? Если пучок имеет в конечном итоге destroyed, является сохранение «Вид»/«гуй» -состояние быть сделано вместо этого в (или какой-либо другой метод пожизненной)?


Update (конкретная проблема вождения моего вопроса)

public class CView : MXFragmentView<CViewVM> 
{  
    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle bundle) 
    { 
     base.OnCreateView(inflater, container, bundle); 

     _inflater = inflater; 
     _container = container; 
     _bundle = bundle;  

     ... 
    } 

    public override void OnSaveInstanceState(Bundle outState) 
    {     
     Log.Info(TAG_APP, "CView.OnSaveInstanceState(): BEGIN"); 
     base.OnSaveInstanceState(outState); 

     outState.PutInt(SaveStateParams.CurrentTabIndex, _tabHost.CurrentTab); 
    } 

    public override void OnDestroy() 
    { 
     Log.Info(TAG_APP, "CView.OnDestroy(): BEGIN"); 
     base.OnDestroy(); 
    } 
} 

I/APP_TAG(6398): CView.OnSaveInstanceState(): BEGIN 
I/APP_TAG(6398): CView.OnDestroy(): BEGIN 
W/Bundle(6398): Key android:view_state expected Bundle but value was a android.util.SparseArray. The default value <null> was returned. 
W/Bundle(6398): Attempt to cast generated internal exception: 
W/Bundle(6398): java.lang.ClassCastException: android.util.SparseArray cannot be cast to android.os.Bundle 
W/Bundle(6398):  at android.os.Bundle.getBundle(Bundle.java:1142) 
W/Bundle(6398):  at android.app.LocalActivityManager.dispatchCreate(LocalActivityManager.java:455) 
W/Bundle(6398):  at CView.n_onCreateView(Native Method) 
W/Bundle(6398):  at CView.onCreateView(CView.java:60) 

Я ознакомление с постом Saving Android Activity state

+0

Нет, это не так. Сохраненное состояние будет передано 'onCreate()' при восстановлении 'Activity'. –

+0

@ XaverKapeller Это отличная новость, однако в настоящее время я имею дело с лестницей (я получаю исключение SparseArray/Bundle). – samosaris

+0

Какое исключение? Тогда вы должны делать что-то неправильно. Я не могу сказать вам, в чем проблема, не видя stacktrace исключения и вашего кода, пожалуйста, отредактируйте их в свой вопрос. –

ответ

0

W/Bundle (6398): в android.os. Bundle.getBundle (Bundle.java:1142)

Arrr, sohdat's, где этот дьявол будет кастин!

public final class Bundle implements Parcelable, Cloneable { 
    private static final String LOG_TAG = "Bundle"; 
    public static final Bundle EMPTY; 
    ... 
    Map<String, Object> mMap = null; 
    ... 
    public Bundle getBundle(String key) { 
     unparcel(); 
     Object o = mMap.get(key); 
     if (o == null) { 
      return null; 
     } 
     try { 
      return (Bundle) o; 
     } catch (ClassCastException e) { 
     typeWarning(key, o, "Bundle", e); 
     return null; 
    } 
    ... 
} 
+0

Кажется, что ** 'mMap' ** как-то ошибочно, или **' key' **. – samosaris

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