Activity学习

本文详细阐述了Android应用中Activity的关键生命周期阶段(onCreate、onStart、onResume、onPause、onStop、onDestroy、onRestart)及其应用场景,同时介绍了四种启动模式:standard、singleTop、singleTask、singleInstance的区别和实际使用场景。

定义:四大组件之一

参考博客:https://juejin.im/post/6844903593930129416

activity是用户可见的部分,需要注意各个生命周期的状态以及在该状态下可以做哪些操作。

 

1.1生命周期

·  onCreate : activity被创建时调用,一般在这个方法中进行活动的初始化工作,如设置布局文件、加载数据、绑定控件等。

·  onStart : 经历该回调后,activity由不可见变为可见,但此时处于后台可见,还不能和用户进行交互。

·  onResume : 已经可见的activity从后台来到前台,可以和用户进行交互。

·  onPause : 当用户启动了新的activity,原来的activity不再处于前台,也无法和用户进行交互,并且紧接着就会调用onStop()方法,但如果用户这时立刻按返回键回到原activity,就会调用onResume()方法让活动重新回到前台。而且在官方文档中给出了说明,不允许在onPause()方法中执行耗时操作,因为这会影响到新activity的启动。场景:比如动画效果在弹出对话框时需要暂停就可以在该状态下执行。

·  onStop : 这个回调代表了activity由可见变为完全不可见,在这里可以进行一些稍微重量级的操作。需要注意的是,处于onPause()和onStop()回调后的activity优先级很低,当有优先级更高的应用需要内存时,该应用就会被杀死,那么当再次返回原activity的时候,会重新调用activity的onCreate()方法。

·  onDestroy : 来到了这个回调,说明activity即将被销毁,应该将资源的回收和释放工作在该方法中执行。

·  onRestart : 这个回调代表了activity由完全不可见重新变为可见的过程,当activity经历了onStop()回调变为完全不可见后,如果用户返回原activity,便会触发该回调,并且紧接着会触发onStart()来使活动重新可见。

1.2 启动模式

standard(标准模式) : 这是activity的默认启动模式,只要启动activity就会创建一个新实例,例如有两个活动ActivityA和AciivityB,现在从活动A中连续3次启动B活动,那么活动B就会依次创建三个实例,按顺序进入ActivityA所在的任务栈中。

singleTop(栈顶复用) :在这种启动模式下,首先会判断要启动的活动是否已经存在于栈顶,如果是的话就不创建新实例,直接复用栈顶活动。如果要启动的活动不位于栈顶,则会创建新实例入栈。例如栈中有活动A、B、C,启动模式全部为singleTop,现在想要新建一个活动C,执行完成后任务栈中的情况依然为A、B、C; 但是如果新建一个活动A,因为A不位于栈顶,所以会重新创建实例入栈,任务栈变为:A、B、C、A,

singleTask(栈内复用) : 这种模式比较复杂,是一种栈内单例模式,当一个activity启动时,会进行两次判断

  • 首先会寻找是否有这个活动需要的任务栈,如果没有就创建这个任务栈并将活动入栈,如果有的话就进入下一步判断。
  • 第二次判断这个栈中是否存在该activity的实例,如果不存在就新建activity入栈,如果存在的话就直接复用,并且带有clearTop效果,会将该实例上方的所有活动全部出栈,令这个activity位于栈顶。
  • 场景: 当前任务栈task1中存在活动A,从A中连续启动三个活动,顺序为B->C->B,B、C的启动模式均为singleTask,请求栈为task2,最后的启动结果将和上一种场景一样,不再重复展示,这里体现了singleTask模式的clearTop属性,第二次启动activityB后会复用栈底的实例,并将activityC出栈。

 

singleInstance(单例) : 这种模式是真正的单例模式,以这种模式启动的活动会单独创建一个任务栈,并且依然遵循栈内复用的特性,保证了这个栈中只能存在这一个活动。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值