Причината, поради която onCreate() се извиква отново, не винаги е, че устройството ви няма достатъчно памет, една от най-честите причини е промяната в ориентацията, която кара дейността да се пресъздаде, така че можете да опитате да поставите това във вашия манифестен файл:
android:screenOrientation="portrait"
android:configChanges="orientation|keyboardHidden|screenSize"
ако обаче експериментирате достатъчно с кода си и стигнете до извода, че той е причинен от унищожаването на активността от android поради недостиг на памет, тогава ето заобиколен начин, който можете да използвате, за да възстановите правилно дейността си.
YourObject mObject;
.
.
.
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
mObject.setImageUri(bla..); //Store image Uri and other values in mObject
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
if (mObject != null) {
//save your object which contains data like image uri
savedInstanceState.putSerializable(KEY, mObject);
}
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
YourObject obj = (YourObject) savedInstanceState.getSerializable(KEY);
if(obj != null)
mObject = obj;
}
и накрая, в onResume, прочетете вашите съхранени данни обратно от mObject, ако не е нула
@Override
protected void onResume() {
super.onResume();
if(mObject != null) {
//set image to imageView using the stored Uri
setImage(imageView, mObject.getImageUri());
}
}
Последователност:
OnResume
OnPause
OnSaveInstanceState - Here we save our data in bundle
OnDestroy - Here we lose all our activity data
OnCreate
onRestoreInstanceState - Here we restore our saved data from bundle if any
OnResume - Here we deal with restored data if any
person
Obaidah
schedule
08.06.2015