2016-02-20 34 views
7

Natknąłem się na 2 różne typy, aby uruchomić moją działalność w oparciu o niektóre parametry. Pierwszym z nich jest savedInstanceState a druga jest getIntent.getExtras()savedInstanceState vs getIntent(). GetExtras()

Q1) Więc co ja nie rozumiem, gdy mijam wiązkę do mojej działalności, a następnie go uruchomić, należy mieć pakiet. Ale jeśli z jakiegoś powodu aktywność zostanie ponownie odtworzona, powinna mieć cały ten sam pakiet. (mam rację?)

Q2) Na podstawie faktu, że Q1 jest prawdziwe, i faktu, że nie mogę po prostu nadpisać pakietu po uruchomieniu już działa, myślę, że jeśli z jakiegoś powodu w moim już się rozpoczął Aktywność, chcę zmienić niektóre parametry pakietu, powinienem stworzyć kilka pól aktywności i wykorzystać te pola w moim życiu aktywności. Zastąpić saveInstanseState, aby zapisać nowe pola, jeśli z jakiegoś powodu moja aktywność zostanie odtworzona. czy to prawda?

Q3) Opierając się na fakcie, że wszystko powyżej jest prawdziwe, w onCreate() powinna każda aktywność w świecie Androida trzeba zacząć tak:

if (savedInstanceState != null) { 
    mType = savedInstanceState.getInt("some_val1"); 
    mCardId = savedInstanceState.getLong("some_val2"); 
    mQuery = savedInstanceState.getString("some_val3"); 
    mCategory = savedInstanceState.getLong("some_val4");; 
} else { 
    mType = getIntent().getExtras().getInt("some_val1"); 
    mCardId = getIntent().getExtras().getLong("some_val2"); 
    mQuery = getIntent().getExtras().getString("some_val3"); 
    mCategory = getIntent().getExtras().getString("some_val4"); 
} 

Q4) Załóżmy onSaveInstanceState został nazwany i zapisany wartości, które różnią się od oryginalnego pakunku, który rozpoczął działanie (getIntent.getExtras). Jeśli działanie zostanie ponownie utworzone, czy to znaczy, że parametr saveInstanceState różni się od getIntent.getExtras() lub czy są one teraz takie same? (Jeśli są takie same, to if/else na powyższym kodzie nie ma prawdziwego znaczenia, bo jest taki sam!).

Q5) Gdybym nie przesłonić onSaveInstanceState ale kiedy stworzył aktywność mijam to Bundle, czy to znaczy, że nadal mogę dostać mój oryginalny pakiet, jeżeli działalność odtworzone ponownie? (domyślam się, że to pytanie odpowie na podstawie innych odpowiedzi)

Odpowiedz

6

Główna różnica między getIntent().getExtras() a savedInstanceState polega na tym, że mają one różne zastosowania. Ma to na celu komunikację między działaniami, podczas gdy stan zapisany służy do bieżącego stanu interfejsu użytkownika po zakończeniu aktywności, np. naciskając przycisk home. Zostanie więc zapisana pozycja twojego numeru ListView s i podobnego lub wartość niezapisanych TextEdit s.

Pytanie 1: Tak, ogólnie rzecz biorąc, informacja nie powinna zostać utracona, o ile nie otworzysz tej czynności po raz drugi.

Q2: Prawda do tej pory. Domyślne widoki zapiszą ich stan, więc nie musisz tego robić samodzielnie. Jeśli jednak twoja aktywność zostanie uruchomiona po raz drugi z innym pakietem, otrzymasz nowe wartości.

Q3: Nie jest to konieczne, zależy to od Twojego przypadku użycia, ale nic by nie złamało. Chodzi o to, że po wczytaniu daty z Internetu musielibyśmy poczekać tylko jeden raz, na drugim wywołanie onCreate() dane zostaną przywrócone (jeśli pokazują je w elementach UI z identyfikatorem!).

Q4: Intencja byłaby wartością początkową, podczas gdy stan zapisany to zmodyfikowany stan wartości.

P5: Generalnie to powinno działać tak samo. Ponieważ podstawowe elementy interfejsu użytkownika będą domyślnie zapisywać ich stan.

Punkt zapisanego stanu to zachowanie zmian interfejsu użytkownika, nawet jeśli aplikacja została zniszczona w tle. Twoja aplikacja zostanie wznowiona w tym momencie, w którym została pozostawiona, nawet jeśli nie było jej już w pamięci urządzenia.