Android 中 activity 的生命周期和数据储存
2016-11-22 22:41
288 查看
Activity 作为 Android 的四大组件之一,其与用户接触的机会最多,所以灵活运用 activity 类能够让我们的程序用户体验感更好。首先我们来看一下 activity 对象的状态图:
这个图想必各位朋友已经看过了,我们来解释一下图片中方法的作用:
上图中方法为继承 activity 类的派生类覆盖实现的方法,从 activity 对象创建到结束被摧毁都是在这些方法中循环调用
需要注意的是当 当前屏幕改变时候可能会摧毁当前 activity 对象,所以最好在 onPause() 方法之中加入数据保护代码段。如果想在屏幕显示方向改变或者屏幕尺寸改变时系统不杀死当前 activity 对,我们需要在当前工程的配置文件中配置一段代码。具体实现如下:
在当前工程的配置文件 AndroidManifest.xml 中的 activity标签中加入 :android:configChanges="orientation|keyboardHidden|screenSize" 属性(API 等级 13 以上时要加 screenSize 属性,不然没有效果) ,该配置表明当 Android 设备屏幕方向、物理键盘(滑盖键盘)、屏幕大小状态改变时不用系统去处理,而是转由当前
activity 对象调用 onConfigurationChanged(Configuration newConfig) 方法自己处理
同时在当前 activity 对象对应的 Java 代码中加入处理方法:
这样,在发生屏幕大小、方向等事件是不会调用 onDestroy() 方法而摧毁 activity 活动对象,而是调用上述方法去处理。
这个图想必各位朋友已经看过了,我们来解释一下图片中方法的作用:
上图中方法为继承 activity 类的派生类覆盖实现的方法,从 activity 对象创建到结束被摧毁都是在这些方法中循环调用
@Override protected void onCreate(Bundle savedInstanceState) // 覆盖 Activity 类的 onCreate() 方法用于创建该活动类对象 { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.v(TAG, "onCreate"); } @Override protected void onDestroy() // 覆盖 Activity 类的 onDestroy() 方法用于摧毁该活动对象,退出程序时或者当前活动和对象被系统杀死时调用 { Log.v(TAG, "onDestroy"); super.onDestroy(); } @Override protected void onPause() // 覆盖 Activity 类的 onPause() 方法用于使当前正在与用户进行交互的活动对象停止与用户的交互 { Log.v(TAG, "onPause"); super.onPause(); } @Override protected void onRestart() // 覆盖 Activity 类的 onRestart() 方法用于重新启动被停止的该活动对象,后面跟着 onStart() 方法 { Log.v(TAG, "onRestart"); super.onRestart(); } @Override protected void onResume() // 覆盖 Activity 类的 onResume() 方法用于当该活动对象要与用户进行交互时调用 { Log.v(TAG, "onResume"); super.onResume(); } @Override protected void onStart() // 覆盖 Activity 类的 onStart() 方法当当前对象为用户可见时调用,后面跟 onResume() 方法或 onStop() 方法 { Log.v(TAG, "onStart"); super.onStart(); } @Override protected void onStop() // 覆盖 Activity 类的 onStop() 方法将当前活动对象不可见,后面跟 onDestroy() 方法或 onRestart() 方法 { Log.v(TAG, "onStop"); super.onStop(); }
需要注意的是当 当前屏幕改变时候可能会摧毁当前 activity 对象,所以最好在 onPause() 方法之中加入数据保护代码段。如果想在屏幕显示方向改变或者屏幕尺寸改变时系统不杀死当前 activity 对,我们需要在当前工程的配置文件中配置一段代码。具体实现如下:
在当前工程的配置文件 AndroidManifest.xml 中的 activity标签中加入 :android:configChanges="orientation|keyboardHidden|screenSize" 属性(API 等级 13 以上时要加 screenSize 属性,不然没有效果) ,该配置表明当 Android 设备屏幕方向、物理键盘(滑盖键盘)、屏幕大小状态改变时不用系统去处理,而是转由当前
activity 对象调用 onConfigurationChanged(Configuration newConfig) 方法自己处理
同时在当前 activity 对象对应的 Java 代码中加入处理方法:
public void onConfigurationChanged(Configuration newConfig) { Log.v(TAG, "Configuration Change"); super.onConfigurationChanged(newConfig); if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) // 当前屏幕方向为横向时 { // 加入相关代码 setContentView(R.layout.activity_main); } else // 否则 { // 加入相关代码 setContentView(R.layout.activity_main); } }
这样,在发生屏幕大小、方向等事件是不会调用 onDestroy() 方法而摧毁 activity 活动对象,而是调用上述方法去处理。
相关文章推荐
- android 学习随笔十五(Activity的生命周期与摧毁时返回数据 )
- android---(Activity组件、状态、生命周期、传递数据、处理返回结果、屏幕方向、保存数据)
- android 学习随笔十五(Activity的生命周期与摧毁时返回数据 )
- Android笔记——Activity生命周期与数据传递
- android83 Activity的生命周期,启动模式,返回时传递数据
- Android之Activity的生命周期和Activity间的跳转和数据传递
- Android之Activity的生命周期和Activity间的切换和数据传递(二)
- Android之Activity的生命周期和Activity间的跳转和数据传递
- Android之Activity的生命周期和Activity间的跳转和数据传递
- ym——Android从零开始(12)(Activity传递返回参数+生命周期+横竖屏+保持临时数据)(新)
- Android-Activity生命周期-4种启动模式-数据传递-显式隐式跳转
- Android Activity生命周期具体内容概述
- Android -- 两个activity界面的切换, 显示Intent 和 隐式Intent,putExtra传递数据
- android之旅13 Activity数据传递与启动模式
- android 屏幕旋转时Activity的生命周期
- Android零基础入门第83节:Activity间数据传递方法汇总
- Android横竖屏切换Activity生命周期变化
- android五大组件之activity生命周期(LifeCycle)
- android Tabhost中,控制activity的生命周期
- 【Android 开发】:Activity的生命周期 及 AndroidManifest.xml 文件详解