前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android 中 activity 的生命周期和数据储存

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

作者头像
指点
发布2019-01-18 17:30:30
7770
发布2019-01-18 17:30:30
举报
文章被收录于专栏:指点的专栏指点的专栏

Activity 作为 Android 的四大组件之一,其与用户接触的机会最多,所以灵活运用 activity 类能够让我们的程序用户体验感更好。首先我们来看一下 activity 对象的状态图:

这个图想必各位朋友已经看过了,我们来解释一下图片中方法的作用:

上图中方法为继承 activity 类的派生类覆盖实现的方法,从 activity 对象创建到结束被摧毁都是在这些方法中循环调用

代码语言:javascript
复制
 @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 代码中加入处理方法:

代码语言:javascript
复制
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 活动对象,而是调用上述方法去处理。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年11月22日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档