活动的生命周期和启动

活动的生命周期和启动

2021/3/23

1812190328 吴烨峰 安全1801

实验内容

1、通过在不同的活动之间的转换,观察onCreate, onStart, onResume, on Pause, onStop,onDestroy以及onRestart函数的调用情况。

(1)新建项目ActivityLifeCycleTest,再创建两个子活动,NormalActivity和DialogActivity,然后分别创建 normal_layout.xml、dialog_layout.xml

在这里插入图片描述

normal_layout.xml和dialog_layout.xml,均添加一个textview内容如下

在这里插入图片描述
在这里插入图片描述

在NormalActivity和DialogActivity中加载这两个布局,然后在AndroidManifest.xml中进行设置

在这里插入图片描述

接下来修改activity_main.xml,重新定制我们主活动的布局,主要是添加两个button,一个用来启动dialogactivity,另一个用来启动Normalactivity

在这里插入图片描述

最后修改MainActivity中代码

在这里插入图片描述
在这里插入图片描述

在onCreate()方法中,我们为两个按钮注册了点击事件,点击第一个按钮会启动Normal,第二个会启动Dialog,然后在七个回调方法中分别打印一句话,因此可以通过观察日志的方式来更直观地理解活动的生命周期
(2)运行程序,观察运行效果
Normal

在这里插入图片描述
返回后:在这里插入图片描述

由于NormalActivity已经把MainActivity完全遮挡住,因此onPause() 和onStop() 方法都会得到执行。然后我们再按下back键返回MainActivity,此时我们再查看日志发现onRestart() 方法会得到执行,之后又会依次执行onStart() 和onResume() 方法。
Dialog

在这里插入图片描述

这时活动就处于暂停状态,可以通过打印的日志看到,只有onPause() 方法得到了执行,onStop() 方法并没有执行,这是因为DialogActivity并没有完全遮挡住MainActivity,此时MainActivity只是进入了暂停状态,并没有进入停止状态。

返回后:

在这里插入图片描述

再按一下back键,此时只有onResume() 方法会得到执行

在这里插入图片描述

再按一下back,则程序会依次会执行onPause() 、onStop() 和onDestroy() 方法,最终销毁MainActivity。

大概流程如下:

在这里插入图片描述

2、通过实验说明存在系统可能自行对活动运行onDestroy。

在进行翻转屏幕的时候,会更新Activity。因此可能自行运行onDestroy,因此我们对其进行翻转屏幕操作

在这里插入图片描述

此时发现日志中,onDestroy已经运行,所以这时候可以用bundle保存好数据,根据键值来保存数据,不建议用来保存实例,因为可能在返回时候已经过时了
同时,建议所有的activity最好都做好数据保存工作,在内存低的时候或者需要频繁翻转屏幕的时候,可以自动保存,提高用户体验

3、利用saveinstantstate处理系统自行运行onDestroy而导致数据丢失的情况

(1)在MainActivity中加入以下代码

在这里插入图片描述
在这里插入图片描述

前面的调用方法,用来取出保存的信息,后面是写了一个方法,存储死亡数据

4、通过实验说明活动的standard, singleTop, singleTask三种启动模式之间的区别点。

(1) standard: 标准模式
新建一个emptyactivity,在mainactivity中添加一个按钮,oncreate()代码如下

在这里插入图片描述

每点击一次按钮,就会创建出一个新的MainActivity实例,图中点击了5次按钮,因此要返回5次才可以退出程序

在这里插入图片描述

(2)singleTop:栈顶复用模式
要创建的Activity已经处于栈顶时,此时会直接复用栈顶的Activity。不会再创建新的Activity;若须要创建的Activity不处于栈顶,此时会又一次创建一个新的Activity入栈,同Standard模式一样。
修改manifest文件中MainActivity启动模式

在这里插入图片描述

不管点击几次按钮,都只出现了一条打印信息,因此只需一次BACK就可以退出了
但是当它并非出于栈顶时,仍然可以创建出新的activity,因此我们新建一个SecondActivity
在MainActivity中修改

在这里插入图片描述

在SecondActivity中代码如下

在这里插入图片描述

效果

在这里插入图片描述
在这里插入图片描述

此时,系统创建了两个不同的Activity,在Second中再次启动First时,栈顶活动已经变成了Second,因此创建了一个新的First,现在按下Back,回到Second,再按,就是回到First,再按一次,才退出程序
(3)singleTask:栈内复用模式
修改manifest

在这里插入图片描述

修改mainactivity

在这里插入图片描述

修改SecondActivity

在这里插入图片描述

效果

在这里插入图片描述
在这里插入图片描述

原理

在这里插入图片描述

若要创建的Activity已经处于栈中时,此时不会创建新的Activity,而是将存在栈中的Activity上面的其他Activity所有销毁,使它成为栈顶。
生命周期:同SingleTop 模式中的情况一同样。仅仅会又一次回调Activity中的 onNewIntent方法

附加题:说明活动singleInstance启动模式的功能

SingleInstance比较特殊,是全局单例模式,是一种加强的SingleTask模式。它除了具有它所有特性外,还加强了一点:具有此模式的Activity仅仅能单独位于一个任务栈中。
比方 A Activity是该模式,启动A后。系统会为它创建一个单独的任务栈,由于栈内复用的特性。新的请求均不会创建新的Activity,除非这个独特的任务栈被系统销毁。
修改manifest

在这里插入图片描述

修改MainActivity

在这里插入图片描述

修改SecondActivity

在这里插入图片描述

新建ThirdActivity

在这里插入图片描述

效果

在这里插入图片描述

可以看到,SecondActivity的Task id 不同于First和Third,说明Second放在一个单独的返回栈,而且这个栈里面只有这一个活动。
按下Back,从Third返回到了First,再按下,回到了Second,再按下Back才退出程序。
原理

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring框架的启动流程和生命周期可以简要地概括为以下几个步骤: 1. 加载配置文件:Spring框架通过读取配置文件来获取相关的配置信息。常见的配置文件包括XML配置文件和注解配置等。 2. 创建容器:Spring框架会根据配置文件中的信息,创建一个应用上下文(ApplicationContext)容器。容器负责管理Bean的生命周期和依赖关系。 3. 实例化Bean:在容器创建过程中,Spring框架会根据配置文件中的信息,实例化所有配置的Bean。 4. 设置Bean属性:Spring框架会将配置文件中的属性值设置到对应的Bean实例中。 5. 调用Bean的初始化方法:如果Bean实现了InitializingBean接口或者在配置文件中通过init-method指定了初始化方法,Spring框架会在实例化Bean之后,调用其初始化方法。 6. 注册Bean后置处理器:Spring框架会注册Bean后置处理器(BeanPostProcessor),后置处理器可以在Bean初始化前后做一些自定义的处理。 7. 完成容器初始化:当所有的Bean都被实例化、属性设置和初始化方法调用完成后,容器初始化过程就完成了。 8. 使用Bean:容器初始化完成后,就可以从容器中获取需要使用的Bean,进行相应的业务处理。 9. 销毁Bean:在应用关闭时,Spring框架会调用所有Bean实现的销毁方法。如果Bean实现了DisposableBean接口或者在配置文件中通过destroy-method指定了销毁方法,Spring框架会在容器关闭前,调用其销毁方法。 总之,Spring框架的启动流程主要包括加载配置文件、创建容器、实例化Bean、设置属性、调用初始化方法、注册后置处理器、完成容器初始化等步骤,而Bean的生命周期则包括实例化、属性设置、初始化、后置处理和销毁等阶段。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值