Android
Cykl życia interfejsu użytkownika
Szukaj…
Zapisywanie danych przy przycinaniu pamięci
public class ExampleActivity extends Activity {
private final static String EXAMPLE_ARG = "example_arg";
private int mArg;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_example);
if(savedInstanceState != null) {
mArg = savedInstanceState.getInt(EXAMPLE_ARG);
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt(EXAMPLE_ARG, mArg);
}
}
Wyjaśnienie
Co się tu dzieje?
System Android zawsze będzie dążył do wyczyszczenia jak największej ilości pamięci. Tak więc, jeśli twoja aktywność jest w tle, a inna aktywność na pierwszym planie wymaga jej udziału, system Android wywoła onTrimMemory()
na twojej aktywności.
Ale to nie znaczy, że wszystkie twoje nieruchomości powinny zniknąć. Co należy zrobić, to zapisać je w obiekcie pakietu. Obiekty pakietu są znacznie lepiej obsługiwane pod względem pamięci. W pakiecie każdy obiekt jest identyfikowany przez unikalną sekwencję tekstową - w powyższym przykładzie zmienna wartości całkowitej mArg
jest mArg
pod nazwą referencyjną EXAMPLE_ARG
. A po odtworzeniu działania wyodrębnij stare wartości z obiektu pakietu zamiast odtwarzać je od nowa