Activity生命周期理解

Activity 是Androidsiege构建模块中最普通的一个。一个Activity通常在你应用程序中是一个单独的屏幕,每一个 Activity是被实现作为一个继承的Activity积累的单独的类, 我们的class将要显示一个有View和响应事件组成的用户界面。多数应用程序是有多个屏幕组成的。例如:一个文本消息发送程序可能有一个显示要发送信息的联系人列表的屏幕,有一个给选择中的联系人编辑屏幕的短信并且,另外的屏幕显示以前的信息或者更改设置,每一个这些屏幕都应该作为一个Activity被实现。移动到另外的屏幕上是通过启动一个新的Activity来完成的。由于一些原因 一个Activity可能会想先前的Acivity返回一个值——例如一个让用户选择一张照片的Activity将会返回选中的照片到应用程序上,

当一个新的屏幕开启的时候先前的屏幕就会被暂停或者是压入历史堆栈,用户可以返回到历史记录中先前打开的屏幕。当她们遗留的不合适时,Activity就会在堆栈中删除,Android为每个从home上运行的程序保存 历史堆栈!

每个Activity对象都有三个状态和七个生命周期触发事件,这三种状态分别为运行、暂停和停止。运行状态就是说这个activity对象对于用户是可见的,焦点就在这个activity对象上;暂停状态就是当前的activity对象对于用户也是可见的,但是焦点不在这个activity对象上,用户不能对这个activity对象进行任何操作,打个比方来说就是用户可以看到两个activity对象,但是进行操作的是第二个activity对象,那么这时第二个activity对象处在运行状态,而第一个就处在暂停状态;停止状态就是这个activity对象对于用户是完全不可见的,用户当然也不能对它进行任何操作了,处在停止状态时,仍然保留着当前的状态和信息。当用户长时间不对处于暂停状态的activity进行操作时,这个activity对象也可能会由暂停状态变为停止状态,变为停止状态后,其实这个activity对象就已经比较危险了,因为当运行其他应用程序时,如果系统内存不足就会首先将处于停止状态的activity对象销毁释放资源空间,执行当前的应用程序,如果内存仍然不足就会将处于暂停状态的activity对象销毁,释放资源空间,运行当前程序,

Activity生命周期的七个状态事件分别为onCreate(BundlesavedInstenceState)、onstart()、onRestart()、onResume()、onPause()、onStop()、onDestory()

下面是activity的生命周期图:

在activity对象加载时开始调用它的onCreate(Bundle savedInstenceState)方法

运行时调用它的onStart()方法和onResume()方法

·当这个activity可见但失去焦点时,就调用它的onPause()方法;当这个activity对象再次获得焦点时,用户可对其进行相应的操作,这时候就调用它的onResume()方法;

      ·当这个activity对象处于不可见的情况,并且与其他的activity进行切换时,这时就由onResume()方法开始执行,往下到onPause()方法,再到onStop(),处于停止状态,用户不能对其进行任何操作。                ·当屏幕的方向发生改变时,Activity会被摧毁并且被重新创建

      注意:但是如果是两个来回切换的页面activity时,下一个activity中有返回键,点击返回键就切换回当前的activity。这时就要注意了,如果是点击第二个activity页面上的返回键,会从onCreate(Bundle savedInstenceState)方法开始调用,第一个activity会重新创建一次,也就是说返回过来的activity页面已经不是切换过去的那个activity了。但是如果点击键盘上的返回键,就会调用onRestart()方法,意思就是这时切换回的界面还是刚才切换过去的第一个activity

      ·假如在这个activity对象里有一个对话框的操作,当点击指定按钮时就会在这个activity中弹出一个对话框,此时的对话框是依附在这个activity之上的,实际上还是显示的一个activity对象。又因为生命周期事件只有在activity和activity之间的转换才会触发,因此,此时无生命周期事件的触发也无方法的调用

     

onSaveInstanceState() 和 onRestoreInstanceState()方法的调用:

它们不是生命周期方法,不一定会被触发。当应用遇到意外情况(如:内存不足、用户直接按Home键)由系统销毁一个Activity时,onSaveInstanceState() 会被调用,从而保存用户数据。但是当用户主动去销毁一个Activity时,例如在应用中按返回键,onSaveInstanceState()就不会被调用。因为在这种情况下,用户的行为决定了不需要保存Activity的状态。通常onSaveInstanceState()只适合用于保存一些临时性的状态,而onPause()适合用于数据的持久化保存。

如果你想在Activity被摧毁前缓存一些数据,并且在Activity被重新创建后恢复缓存的数据。可以重写Activity的onSaveInstanceState() 和 onRestoreInstanceState()方法

这时应注意的是:onRestoreInstanceState()方法调用的前提是activity必须被系统真正销毁,即onDestory()方法必须被执行。反之,如果系统没有将该activity销毁,该activity只是处于暂停或停止状态,即该activity不是被正常关闭销毁,如果是因为内存不足或其他原因导致可能被系统销毁;onRestoreInstenceState方法就不会被调用执行。例如,当正在显示activity A的时候,用户按下HOME键回到主界面,然后用户紧接着又返回到activity A,这种情况下activity A一般不会因为内存的原因被系统销毁,故activity A的onRestoreInstanceState方法不会被执行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值