Android四大组件之Activity----重新认识Android(4)

看一下这一张经典的生命周期流程图,了解Activity生命周期的几个过程:

1.启动Activity:系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity进入运行状态。

2.当前Activity被其他Activity覆盖其上或被锁屏:系统会调用onPause方法,暂停当前Activity的执行。

3.当前Activity由被覆盖状态回到前台或解锁屏:系统会调用onResume方法,再次进入运行状态。

4.当前Activity转到新的Activity界面或按Home键回到主屏,自身退居后台:系统会先调用onPause方法,然后调用onStop方法,进入停滞状态。

5.用户后退回到此Activity:系统会先调用onRestart方法,然后调用onStart方法,最后调用onResume方法,再次进入运行状态。

6.当前Activity处于被覆盖状态或者后台不可见状态,即第2步和第4步,系统内存不足,杀死当前Activity,而后用户退回当前Activity:再次调用onCreate方法、onStart方法、onResume方法,进入运行状态。

7.用户退出当前Activity:系统先调用onPause方法,然后调用onStop方法,最后调用onDestory方法,结束当前Activity。

加载对应的布局文件,处理用户信息
继承Activity并重写onCreate方法
内部调用父类的onCreate方法并且调用setContentView方法加载布局文件

再说一下activity的活动过程:
一、Activity的注册
Activity使用要配置在清单文件中的配置当前项目使用到的Activity

如果创建的是Activity那么会默认注册,否则需要手动注册

通过意图过滤器指定启动的主Activity
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

二、Activity之间的跳转:

跳转需要用到Intent(意图)对象--指明当前和目标的Activity
一般需要设置当前的Activity的对象和目标的Activity的Class对象
跳转方式:
1、startActivity:单跳转--
在MainActivity中定义Intent对象: Intent intent=new Intent(当前Activity.this,目标Activity.class)
调用startActivity(Intent)启动“意图”指定的Activity

2、startActivityForResult:回传跳转--目标Activity结束的时候,进行数据的回传
A页面: startActivityForResult(Intent,int reqCode)
A页面: 重写方法 onActivityResult(int reqCode,int resultCode,Intent data)
B页面: setResult(int resultCode,Intent data)该方法会在BActivity销毁的时候自动调用


当一个Activity需要向另外一个Activity跳转并向第一个Activity返回数据的时候
我们可以采用回传跳转
FirstActivity
SecondActivity
步骤:
1、FirstActivity:设置回传跳转
使用startActivityForResult(Intent,int)方法,
参数说明:第一个参数为意图对象(包含目标Activity的Class对象和数据)
第二个参数为请求码,整型类型
2、FirstActivity:重写onActivityResult(int,int intent)方法
此方法获取回传的数据
参数说明:
第一个参数:请求码
第二个参数:结果响应吗(由SecondActivity页面指定整型)
第三个参数:回传数据的意图对象
3、SecondActivity:设置回传数据setResult(int,intent)
参数说明:
第一个参数:结果响应吗
第二个参数:意图对象(包含目标Activity的Class对象和回传数据)
三、Activity传值方式:
1、Intent传值是最通常的方法--putExtra或Bundle的用法较简单,可以当作Map使用
2、静态成员变量
3、Application全局对象
4、startActivityForResult(数据回传) 一般用于拍照、录像、二维码扫描


另外还有其他三个方法需要注意:

1.onWindowFocusChanged方法:在Activity窗口获得或失去焦点时被调用,例如创建时首次呈现在用户面前;当前Activity被其他Activity覆盖;当前Activity转到其他Activity或按Home键回到主屏,自身退居后台;用户退出当前Activity。

2.onSaveInstanceState:(1)在Activity被覆盖或退居后台之后,系统资源不足将其杀死,此方法会被调用;(2)在用户改变屏幕方向时,此方法会被调用;(3)在当前Activity跳转到其他Activity或者按Home键回到主屏,自身退居后台时,此方法会被调用。第一种情况我们无法保证什么时候发生,系统根据资源紧张程度去调度;第二种是屏幕翻转方向时,系统先销毁当前的Activity,然后再重建一个新的,调用此方法时,我们可以保存一些临时数据;第三种情况系统调用此方法是为了保存当前窗口各个View组件的状态。onSaveInstanceState的调用顺序是在onPause之前。

3.onRestoreInstanceState:(1)在Activity被覆盖或退居后台之后,系统资源不足将其杀死,然后用户又回到了此Activity,此方法会被调用;(2)在用户改变屏幕方向时,重建的过程中,此方法会被调用。我们可以重写此方法,以便可以恢复一些临时数据。onRestoreInstanceState的调用顺序是在onStart之后。

4.每次屏幕旋转方向时,只有onConfigurationChanged方法被调用,没有了销毁重建的过程。需要注意的几点:

            1.如果<activity>配置了android:screenOrientation属性,则会使android:configChanges="orientation"失效。

            2.模拟器与真机差别很大:模拟器中如果不配置android:configChanges属性或配置值为orientation,切到横屏执行一次销毁->重建,切到竖屏执行两次。真机均为一次。模拟器中如果配置android:configChanges="orientation|keyboardHidden"(如果是Android4.0,则是"orientation|keyboardHidden|screenSize"),切竖屏执行一次onConfigurationChanged,切横屏执行两次。真机均为一次。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值