onSaveInstanceState和onRestoreInstanceState.
来源:互联网 发布:王天一用软件作弊 编辑:程序博客网 时间:2024/05/17 00:00
1.onSaveInstanceState(Bundle outState)与onRestoreIntanceState(Bundle savedInstanceState)什么情况下调用?
系统只会在Activity即将被销毁并且有机会重新显示的情况下才会去调用它,比如说,旋转屏幕,Activity异常销毁同时会立刻创建新的Activity实例。 这个与用户交互Activity正常销毁不同.所以可以简单的理解为Activity只会在异常终止的时候才会调用onSaveInstanceState和 onRestoreIntanceState来恢复和存储数据。其他情况不会触发这个过程.
异常情况下:
Activity终止,系统会调用onSaveInstanceState来保存当前Activity的状态,这个方法调用时机是在 ,当Activity被重新创建后,系统会调用onRestoreIntanceState,并且把之前Activity销毁时 调用的onSaveInstanceState()方法所保存的bundle作为参数同时传递给onRestoreIntanceState 和onCreate,但二者是有区别的.
俩者区别:
1) onRestoreIntanceState一旦被调用,其参数Bundle savedInstanceState是一定有值的,所以不需要额外的判断是否为空。2) onCreate()不行,onCreate如果是正常启动,其参数Bundle savedInstanceState为null,所以必须进行额外的判断。官方建议采用onRestoreInstanceState()去恢复数据.
以下代码帮助理解:横竖屏切换下
public class MainActivity extends Activity { private final static String TAG = "MainActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (savedInstanceState != null) { String test = savedInstanceState.getString("HelloWorld"); Log.d(TAG, "[onCreate] restore HelloWorld:" + test); } //用代码写死横竖屏 //setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); Log.d(TAG, "onSaveInstanceState"); outState.putString("HelloWorld", "test"); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); String test = savedInstanceState.getString("HelloWorld"); Log.d(TAG, "[onRestore] restore HelloWorld:" + test); } @Override protected void onStart() { super.onStart(); Log.d(TAG, "onStart"); } @Override protected void onResume() { super.onResume(); Log.d(TAG, "onResume"); } @Override protected void onPause() { super.onPause(); Log.d(TAG, "onPause"); } @Override protected void onStop() { super.onStop(); Log.d(TAG, "onStop"); } @Override protected void onDestroy() { super.onDestroy(); Log.d(TAG, "onDestroy"); }
输出结果:
a.刚启动(Activity) : create-> start-> resumeb.旋转屏幕后,旧的activity先puase -->stop-->destory,而onSaveInstanceState就是在onStop之前调用.c. 新的Activity的在oncreate方法中,if (savedInstanceState != null) 为true,从而打印log.从而说明旧activity在销毁前进行了数据的存储.d.新的activity:create -> start -> onRestoreInstanceState -> onresume
1 0
- onSaveInstanceState和onRestoreInstanceState
- onSaveInstanceState和onRestoreInstanceState
- onSaveInstanceState和onRestoreInstanceState
- onSaveInstanceState和onRestoreInstanceState
- onSaveInstanceState和onRestoreInstanceState
- onSaveInstanceState和onRestoreInstanceState()
- onSaveInstanceState() 和 onRestoreInstanceState()
- onSaveInstanceState() 和 onRestoreInstanceState()
- onSaveInstanceState() 和 onRestoreInstanceState()
- onSaveInstanceState和onRestoreInstanceState详解
- onSaveInstanceState和onRestoreInstanceState()
- onSaveInstanceState和onRestoreInstanceState浅谈
- onSaveInstanceState和onRestoreInstanceState()
- onSaveInstanceState和onRestoreInstanceState()
- onSaveInstanceState和onRestoreInstanceState()
- onSaveInstanceState和onRestoreInstanceState()
- onSaveInstanceState和onRestoreInstanceState()
- onSaveInstanceState和onRestoreInstanceState
- Android客户端使用HttpURLConnection doGet与服务器数据交互简单示例
- 数据库水平切分的实现原理解析——分库,分表,主从,集群,负载均衡器(转)
- 利用www类从网上加载图片
- 2月英语总结——遇见AJ
- BZOJ 2440 完全平方数 莫比乌斯函数应用
- onSaveInstanceState和onRestoreInstanceState.
- JVM学习笔记——虚拟机类加载机制
- Fastlane的deliver指令
- 从零开始写第一个Android应用程序
- DIY个人智能家庭网关——手机篇之客户端设计
- Android Studio配置文件路径修改
- 初学python:Ubuntu安装一个可视编程IDE
- C# 在窗体中绘制字符串
- c++中map与unordered_map的区别