Я занимаюсь разработкой приложения, которое использует несколько пользовательских классов в качестве членов.
Я реализовал сериализацию / десериализацию в методах onSaveInstanceState и onRestoreInstanceState.
Все отлично работает при повороте экрана (приложение разрушается и создается заново), а мои объекты восстанавливаются.
Однако при нажатии кнопки домой приложение вылетает в методе onPause (который я не изменял) ...
Есть какие-нибудь подсказки о том, что происходит?
Вот пример кода, который воспроизводит проблему
import java.io.Serializable;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class InvestigateError extends Activity {
private static final String LOG_TAG = "MYERROR";
protected ShowInfo myShowInfo;
protected class ShowInfo implements Serializable
{
private static final long serialVersionUID = 1L;
public String title;
}
public void populateMembers()
{
myShowInfo = new ShowInfo();
myShowInfo.title = "Was I serialized???";
}
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
if(savedInstanceState == null)
populateMembers();
Log.d(LOG_TAG,"Activity created");
}
/* Save members */
@Override
public void onSaveInstanceState(Bundle outState) {
Log.d(LOG_TAG,"__ SAVEINSTANCE __");
outState.putSerializable("myshowInfo", myShowInfo);
super.onSaveInstanceState(outState);
}
/* Restore members */
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
Log.d(LOG_TAG,"__ RECALLINSTANCE __");
myShowInfo = (ShowInfo) savedInstanceState.getSerializable("myshowInfo");
Log.d(LOG_TAG,"string from object: " + myShowInfo.title);
}
@Override
protected void onDestroy() {
Log.d(LOG_TAG,"__ DESTROY __");
super.onDestroy();
}
@Override
protected void onPause() {
Log.d(LOG_TAG,"__ PAUSE __");
super.onPause();
}
@Override
protected void onStop() {
Log.d(LOG_TAG,"__ STOP __");
super.onStop();
}
}
Вот начало трассировки стека
java.lang.RuntimeException: Parcelable обнаружил IOException при записи сериализуемого объекта (name = com.esquared.InvestigateError.InvestigateError $ ShowInfo)
на android.os.Parcel.writeSerializable (Parcel.java:1160)
в ndroid.os.Parcel.writeValue (Parcel.java:1114)
на android.os.Parcel.writeMapInternal (Parcel.java:479)
...