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

    xiaoxiao2021-04-12  38

    看一下这一张经典的生命周期流程图,了解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,切横屏执行两次。真机均为一次。

    转载请注明原文地址: https://ju.6miu.com/read-667702.html

    最新回复(0)