Activity面试指南与面试题精选

提起四大组件之首Activity,想必是无人不知无人不晓,不论多么初级的android工程师都会比较了解,接下来就总结下关于Activity的面试题。1.生命周期返回栈Q:谈一下返回栈首先理解android是使用Task来管理活动,一个Task就是一组存放在栈里的活动的集合,这个栈就叫做返回栈,每启动一个新的活动,就会将其放入栈顶,当我们点击back回退或调用activity的finish...
摘要由CSDN通过智能技术生成

文章目录


提起四大组件之首Activity,想必是无人不知无人不晓,不论多么初级的android工程师都会比较了解,接下来就总结下关于Activity的面试题。

1.生命周期

返回栈

Q:谈一下返回栈

首先理解android是使用Task来管理活动,一个Task就是一组存放在栈里的活动的集合,这个栈就叫做返回栈,每启动一个新的活动,就会将其放入栈顶,当我们点击back回退或调用activity的finish函数处于栈顶的活动就会出栈,前一个入栈的活动就会到栈顶,系统总是显示处于栈顶的活动。

活动生命周期

Q:说下Activity的生命周期?

在这里插入图片描述

  1. onCreate()方法:活动第一次创建的时候被调用,常做初始化的操作,比如加载布局(setContentView),绑定事件(findViewById)。表示Activity正在创建
  2. onStart()方法:活动由不可见到可见的时候被调用,表示Activity正在启动,此时Activity可见但不在前台
  3. onResume()方法:活动准备好和用户进行交互时调用。表示Acitivity获得焦点,此时Activity可见且在前台
  4. onPause()方法:系统准备去启动或恢复另一个活动时调用。表示Activity正在停止,此时可做存储数据,停止动画等操作。
  5. onStop()方法:在活动完全不可见的时候调用。表示Activity即将停止
  6. onDestory()方法:在活动被销毁之前调用,表示Activity即将销毁,常做回收工作、资源释放
  7. onRestart()方法:在活动由停止状态变为运行状态之前调用。表示Activity即将重启
Q:说下活动的生存期/(onStart方法/onStop()方法与onResume()方法/onPause()方法有什么区别)

活动的生存期分为三个:1.完整生存期 2.可见生存期 3.前台生存期
完整生存期:onCreate()方法与onDestory()都处于完整生存期,一般情况下,Activity会在onCreate()方法中完成各种初始化操作,而在onDestory()方法中完成释放内存的操作。
可见生存期:onStart()方法与onStop()方法就是可见生存期Activity对于用户是可见的,但无法与用户交互。onStart()方法中对资源进行加载,onStop()方法中对资源进行释放。
前台生存期:onResume方法与onPause方法就是前台生存期,在前台生存期内,活动处于运行状态,此时可以与用户交互。

Q:说下Activity处于onPasue()下可以执行那些操作?

1.用户返回该Activity,调用onResume()方法,重新running
2.用户打开了其他Activity,就会调用onStop()方法
3.系统内存不足,拥有更高权限的应用需要内存,该Activity就会被系统回收
4.如果用户返回到onStop()的Activity又显示在前台了,系统会调用

onRestart() -> onStart() -> onResume() 然后重新running

当Activity结束(调用finish()方法)就会调用onDestory()方法释放所有占用的资源。

生命周期的切换过程
1.启动一个Activity

onCreate->onStart->onResume

2.当一个Activity打开另一个Activity都会回调哪些方法,如果ActivityB是完全透明的呢,如果启动的是一个对话框Activity呢?

A:onPause->B:onCreate->B:onStart->B:onResume->A:onStop
如果ActivityB是完全透明的或对话框Activity则不会调用onStop。

3.启动新Activity后,又返回到旧的Activity

B:onPause->A:onRestart->A:onStart->A:onResume->B:onStop->B:onDestory

4.关闭屏幕/按Home键:

onPause->onStop

5.当一个Activity按Home键切换到桌面后又回到该Activity回调哪些方法。

onPause->onStop->onRestart->onStart->onResume

6.当一个Activity按back键回退时回调哪些方法

onPause->onStop->onDestory

Activity的优先级

1.可见且可以交互(前台Acitivity):正在和用户交互,优先级最高。
2.可见但不可以交互(可见但非前台Activity):比如当前Activity启动了一个对话框Activity,当前Activity就是可见但不可以交互。
3.后台Activity:已经被暂停的Activity,比如执行了onStop,优先级最低。
当系统内存不足,会按照优先级顺序从低到高去杀死目标Activity所在的进程。

Q:(1)优先级低的Activity在内存不足被回收后怎样做可以恢复到销毁前状态?/(2)横竖屏切换后怎样做可以恢复到销毁前状态?

回答:优先级低的Activity在内存不足被回收后重新打开(横竖屏切换的过程中)会引发Activity重建。
在Activity由于异常情况被终止时,系统会调用onSaveInstanceState方法来保存当前Activity的状态,该方法调用于onStop之前,与onPause方法没有时序关系。当异常终止的Activity被重建时,会调用onRestoreInstanceState方法(该方法在onStart之后),并且把Activity销毁时onSaveInstanceState保存的Bundle对象参数同时传递给onCreate方法onRestoreInstanceState方法。该方法的调用是在onStart之前。因此可通过onRestoreInstanceState(Bundle savedInstanceState)和onCreate((Bundle savedInstanceState)来判断Activity是否被重建,并取出数据进行恢复。但需要注意的是,在onCreate取出数据时一定要先判断savedInstanceState是否为空。
补充:其中onCreate和onRestoreInstanceState方法来恢复Activity的状态的区别
onRestoreInstanceState方法回调则说明bundle对象非空,不需要加非空判断,而onCreate需要非空判断。

Q:谈谈onSaveInstanceState() 与 onRestoreIntanceState()
onSaveInstanceState()

这两个方法并不是生命周期方法,它们并不一定会被触发。当应用遇到意外情况(如:内存不足、用户直接按Home键)由系统销毁一个Activity时,onSaveInstanceState() 会被调用,该方法的调用在onStop之前,与onPause没有时序关系但是当用户主动去销毁一个Activity时,例如在应用中按返回键,onSaveInstanceState()就不会被调用。因为在这种情况下,用户的行为决定了不需要保存Activity的状态。
onSaveInstanceState()时机:
(1)用户按下Home键
(2)横竖屏切换
(3)按下电源按钮(关闭屏幕显示)
(4)内存不足导致优先级的Activity被杀死

onRestoreI
  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值