Activity生命周期

一、基本生命周期
这是一张经典的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生命周期中往往还有其他几个方法的参与,这几个方法调用的场景比较灵活,单独拿出来说明:
1、onWindowFocusChanged方法:在Activity窗口获得或失去焦点时被调用,例如创建时首次呈现在用户面前;当前Activity被其他Activity覆盖;当前Activity转到其他Activity或按Home键回到主屏,自身退居后台;用户退出当前Activity等。另外,并且当Activity被创建时是在onResume之后被调用,当Activity被覆盖或者退居后台或者当前Activity退出时,它是在onPause之后被调用。这个方法在某种场合下还是很有用的,例如程序启动时想要获取视特定视图组件的尺寸大小,在onCreate中可能无法取到,因为窗口Window对象还没创建完成,这个时候我们就需要在onWindowFocusChanged里获取。
2、onSaveInstanceState 方法:(1)在Activity被覆盖或退居后台之后,系统资源不足时会将其杀死,此时该方法会被调用;(2)在用户改变屏幕方向时,此方法会被调用;(3)在当前Activity跳转到其他Activity或者按Home键回到主屏,自身退居后台时,此方法会被调用。第一种情况我们无法保证什么时候发生,系统根据资源紧张程度去调度;第二种是屏幕翻转方向时,系统先销毁当前的Activity,然后再重建一个新的,调用此方法时,我们可以保存一些临时数据;第三种情况系统调用此方法是为了保存当前窗口各个View组件的状态。onSaveInstanceState的调用顺序是在onPause之前。
3、onRestoreInstanceState方法:(1)在Activity被覆盖或退居后台之后,系统资源不足将其杀死,然后用户又回到了此Activity,此方法会被调用;(2)在用户改变屏幕方向时,重建的过程中,此方法会被调用。我们可以重写此方法,以便可以恢复一些临时数据。onRestoreInstanceState的调用顺序是在onStart之后。
4、 onConfigurationChanged方法:当APP环境配置改变时调用,如屏幕横竖变化时调用,注意1:修改了manifest文件后才能生效,如

android:configChanges="orientation|screenSize"

注意2:会影响activity生命周期,屏幕横竖改变不再重新启动activity,也不再调用onRestoreInstanceState和onSaveInstanceState,可能是将周期保存数据工作交给onConfigurationChanged方法,需测试查看生命周期。
三、屏幕方向设置
没有特殊要求的应用,我们最好锁定屏幕方向,防止Activity的重绘。
1.指定为竖屏:在AndroidManifest.xml中对指定的Activity设置android:screenOrientation=”portrait”,或者在onCreate方法中指定:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);  //竖屏             

2.指定为横屏:在AndroidManifest.xml中对指定的Activity设置android:screenOrientation=”landscape”,或者在onCreate方法中指定:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); //横屏  
项目资源包含:可运行源码+sql文件+LW; python3.8+django+mysql5.7+html 适用人群:学习不同技术领域的小白或进阶学习者;可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 系统基于Python语言和Django框架研究开发,利用MySQL进行数据管理,构建了一个符合现代教育需求的B/S结构题库管理子系统。系统主要为两种用户角色而设计,即管理员与教师。管理员有权管理教师档案、设置学院和专业目录、维护课程信息和整理题库,而教师端的功能则包括手动录入试题及批量导入试题,特别是对包含公式和图形的试题内容,系统能够实现精确解析和存储。 教师端的功能需求主要集中在试题的录入、管理和查询。教师需要能够方便地录入新的试题到系统中,包括填写题目的基本信息如题型、答案、难度等,并上传包含公式和图形的复杂试题内容。系统应允许教师对已录入的试题进行修改或删除,并提供高效的搜索功能,以便教师能快速找到特定的题目。教师还要能够批量导入试题,系统需支持不同格式的文档,TXT和DOC,并解析文档中的内容,包括图形和公式。 管理员的功能需求主要集中在系统管理和题库维护。管理员负责管理教师账户和权限设置,确保每位教师能够访问其应有的系统功能。管理员同时需要监控系统的整体性能和安全状态,执行必要的系统升级和维护,以保证系统的稳定运行。在题库管理方面,管理员需维护课程信息和相关的题库数据,包括增添查改与课程相关的题目。管理员还需要确保题库的内容准确无误,符合教学需求,并处理由教师提出的关于题库的任何问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值