a.如果在此Activty中启动其他应用,当返回时系统为我门保存了当前状态(应该也是调用了以下方法来保存)。
public class MarqueeTextView extends TextView implements OnClickListener
{
public Parcelable onSaveInstanceState()
{
Parcelable superState = super.onSaveInstanceState();
SavedState ss = new SavedState(superState);
ss.step = step;
ss.isStarting = isStarting;
return ss;
}
@Override
public void onRestoreInstanceState(Parcelable state)
{
if (!(state instanceof SavedState))
{
super.onRestoreInstanceState(state);
return;
}
SavedState ss = (SavedState) state;
super.onRestoreInstanceState(ss.getSuperState());
step = ss.step;
isStarting = ss.isStarting;
}
public static class SavedState extends BaseSavedState
{
public boolean isStarting = false;
public float step = 0.0f;
SavedState(Parcelable superState)
{
super(superState);
}
@Override
public void writeToParcel(Parcel out, int flags)
{
super.writeToParcel(out, flags);
out.writeBooleanArray(new boolean[]
{ isStarting });
out.writeFloat(step);
}
public static final Parcelable.Creator<SavedState> CREATOR = new Parcelable.Creator<SavedState>()
{
public SavedState[] newArray(int size)
{
return new SavedState[size];
}
@Override
public SavedState createFromParcel(Parcel in)
{
return new SavedState(in);
}
};
@SuppressWarnings("unused")
private SavedState(Parcel in)
{
super(in);
boolean[] b = new boolean[1];
in.readBooleanArray(b);
if (b != null && b.length > 0)
isStarting = b[0];
step = in.readFloat();
}
}
}
b.如果是在其他子Activty中启动其他应用,当返回时View滑动状态就会丢失。
View类有一个继承自AbsSavedState的BaseSavedState类,所有View的子类都会继承这个BaseSavedState类。当然包括ListView,TextView等等。
public class MarqueeTextView extends TextView implements OnClickListener
{
public final static String TAG = MarqueeTextView.class.getSimpleName();
private float step = 0f;
public boolean isStarting = false;
public Parcelable onSaveInstanceState()
{
Parcelable superState = super.onSaveInstanceState();
SavedState ss = new SavedState(superState);
ss.step = step;
ss.isStarting = isStarting;
return ss;
}
@Override
public void onRestoreInstanceState(Parcelable state)
{
if (!(state instanceof SavedState))
{
super.onRestoreInstanceState(state);
return;
}
SavedState ss = (SavedState) state;
super.onRestoreInstanceState(ss.getSuperState());
step = ss.step;
isStarting = ss.isStarting;
}
public static class SavedState extends BaseSavedState
{
public boolean isStarting = false;
public float step = 0.0f;
SavedState(Parcelable superState)
{
super(superState);
}
@Override
public void writeToParcel(Parcel out, int flags)
{
super.writeToParcel(out, flags);
out.writeBooleanArray(new boolean[]
{ isStarting });
out.writeFloat(step);
}
public static final Parcelable.Creator<SavedState> CREATOR = new Parcelable.Creator<SavedState>()
{
public SavedState[] newArray(int size)
{
return new SavedState[size];
}
@Override
public SavedState createFromParcel(Parcel in)
{
return new SavedState(in);
}
};
@SuppressWarnings("unused")
private SavedState(Parcel in)
{
super(in);
boolean[] b = new boolean[1];
in.readBooleanArray(b);
if (b != null && b.length > 0)
isStarting = b[0];
step = in.readFloat();
}
}
}