您的位置:首页 > 移动开发 > Android开发

Android 中 activity 的生命周期和数据储存

2016-11-22 22:41 288 查看
Activity 作为 Android 的四大组件之一,其与用户接触的机会最多,所以灵活运用 activity 类能够让我们的程序用户体验感更好。首先我们来看一下 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 活动对象,而是调用上述方法去处理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: