接触Activity的时候有一个知识总是感觉用的地方不是特别多,但它也是Activity生命周期的一部分,那就是Activity的状态保存与恢复了,在生命周期中回调的方法是onSaveInstanceState和onRestoreInstanceState。那么什么时候我们需要用到它呢?
从字面意义上可判断场景如下:
1.关闭Activity(例如按下back键)
2.转向后台运行时(例如有电话打来、按下Home键等)
3.界面跳转
4.运行时配置发生变更(例如横竖屏切换)
... ...
Activity的生命周期方法处理入口在ActivityThread中,查看如下源码:
ActivityThread{
private void callCallActivityOnSaveInstanceState(ActivityClientRecord r) {
r.state = new Bundle();
r.state.setAllowFds(false);
if (r.isPersistable()) {
r.persistentState = new PersistableBundle();
mInstrumentation.callActivityOnSaveInstanceState(r.activity, r.state,
r.persistentState);
} else {
mInstrumentation.callActivityOnSaveInstanceState(r.activity, r.state);
}
}
}
Instrumentation{
public void callActivityOnSaveInstanceState(Activity activity, Bundle outState) {
activity.performSaveInstanceState(outState);
}
}
Activity{
final void performSaveInstanceState(Bundle outState) {
onSaveInstanceState(outState);
}
从字面意义上可判断场景如下:
1.关闭Activity(例如按下back键)
2.转向后台运行时(例如有电话打来、按下Home键等)
3.界面跳转
4.运行时配置发生变更(例如横竖屏切换)
... ...
Activity的生命周期方法处理入口在ActivityThread中,查看如下源码:
ActivityThread{
private void callCallActivityOnSaveInstanceState(ActivityClientRecord r) {
r.state = new Bundle();
r.state.setAllowFds(false);
if (r.isPersistable()) {
r.persistentState = new PersistableBundle();
mInstrumentation.callActivityOnSaveInstanceState(r.activity, r.state,
r.persistentState);
} else {
mInstrumentation.callActivityOnSaveInstanceState(r.activity, r.state);
}
}
}
Instrumentation{
public void callActivityOnSaveInstanceState(Activity activity, Bundle outState) {
activity.performSaveInstanceState(outState);
}
}
Activity{
final void performSaveInstanceState(Bundle outState) {
onSaveInstanceState(outState);
}