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

本文详细介绍了Android中Activity组件的生命周期,包括从创建到销毁过程中的关键方法如onCreate(), onResume(), onPause()等,并提供了示例代码。此外还讲解了如何处理屏幕方向变化而不重启Activity。

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 活动对象,而是调用上述方法去处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值