Android面试基础总结之Activity
作者:互联网
Android面试基础总结之Activity
文章目录
前言
注意我只说重点
在把Android基本知识学习的差不多之后,我们即将迎来了一年一度的毕业季,所以在准备从新来,以下是我总结的activity的面试基本知识,多的不说只说基础。有不对的地方还请各位多多指出。一起学习,一起躺平。往后我会一点一点地总结。争取找个优秀的工作。
我们都知道android中有四大组件(Activity 活动,Service 服务,Content Provider 内容提供者,BroadcastReceiver 广播接收器),Activity是我们用的最多也是最基本的组件,因为应用的所有操作都与用户相关,Activity 提供窗口来和用户进行交互。
什么是activity
activity是独立平等的,用来处理用户操作。几乎所有的activity都是用来和用户交互的,所以activity类会创建了一个窗口,开发者可以通过setContentView(View)的接口把UI放到给窗口上。
activity 的生命周期
- onCreate()
你必须实现此回调,它会在系统创建你的 Activity 时触发。你的实现应该初始化 Activity 的基本组件:
例如,你的应用应该在此处创建视图并将数据绑定到列表。最重要的是,你必须在此处调用 setContentView() 来定义 Activity 界面的布局。
onCreate() 完成后,下一个回调将是 onStart()。
- onStart()
onCreate() 退出后,Activity 将进入“已启动”状态,并对用户可见。此回调包含 Activity 进入前台与用户进行互动之前的最后准备工作。
- onResume()
系统会在 Activity 开始与用户互动之前调用此回调。此时,该 Activity 位于 Activity 堆栈的顶部,并会捕获所有用户输入。应用的大部分核心功能都是在 onResume() 方法中实现的。
onResume() 回调后面总是跟着 onPause() 回调。
- onPause()
当 Activity 失去焦点并进入“已暂停”状态时,系统就会调用 onPause()。例如,当用户点按“返回”或“最近使用的应用”按钮时,就会出现此状态。当系统为你的 Activity 调用 onPause() 时,从技术上来说,这意味着你的 Activity 仍然部分可见,但大多数情况下,这表明用户正在离开该 Activity,该 Activity 很快将进入“已停止”或“已恢复”状态。
如果用户希望界面继续更新,则处于“已暂停”状态的 Activity 也可以继续更新界面。例如,显示导航地图屏幕或播放媒体播放器的 Activity 就属于此类 Activity。即使此类 Activity 失去了焦点,用户仍希望其界面继续更新。
你不应使用 onPause() 来保存应用或用户数据、进行网络呼叫或执行数据库事务。
onPause() 执行完毕后,下一个回调为 onStop()或 onResume(),具体取决于 Activity 进入“已暂停”状态后发生的情况。
- onStop()
当 Activity 对用户不再可见时,系统会调用 onStop()。出现这种情况的原因可能是 Activity 被销毁,新的 Activity 启动,或者现有的 Activity 正在进入“已恢复”状态并覆盖了已停止的 Activity。在所有这些情况下,停止的 Activity 都将完全不再可见。
系统调用的下一个回调将是 onRestart()(如果 Activity 重新与用户互动)或者 onDestroy()(如果 Activity 彻底终止)。
- onRestart()
当处于“已停止”状态的 Activity 即将重启时,系统就会调用此回调。onRestart() 会从 Activity 停止时的状态恢复 Activity。
此回调后面总是跟着 onStart()。
- onDestroy()
系统会在销毁 Activity 之前调用此回调。
此回调是 Activity 接收的最后一个回调。通常,实现 onDestroy() 是为了确保在销毁 Activity 或包含该 Activity 的进程时释放该 Activity 的所有资源。
生命周期几种普通情况
- 一个特定的activity,第一次启动,生命周期如下:onCreate()–>onStart()–>onResume()
- 用户打开一个新的activity,onPause()–>onStop()
- 再次回到原来的activity, onRestart()–>onStart–>onResume()
- 点击返回按钮时,onPause()–>onStop()–>onDestory()
- 按home键时又回到app ,onPause()–>onStop()–>onRestart()–>onStart–>onResume()
- 调用finish() , onDestory()
特殊情况下的生命周期
上面是普通的生命周期,但是在一些特殊的情况下,activity的生命周期经历有些异常,下面就是两种异常情况:
- 横竖屏切换
在横竖屏切换的过程中,会发生activity被销毁并重新创建的过程。在了解这种情况下的生命周期是,首先应该了解这两个回掉:
onSaveInstanceState和onRestorelnstanceState。
在activity由于异常情况下终止时,系统会调用onSaveInstanceState来保存当前activity的状态。这个方法在onStop之前,他和onPause没有既定的时序关系,该方法只是在activity异常调用的情况下调用的,当异常终止时系统会调用onRestorelnstanceState,并且把activity销毁时的onSaveInstanceState方法保存的Bundle对象参数同时传递给onRestorelnstanceState和onCreate方法 因此可以通过onRestorelnstanceState的方法来恢复activity 的状态。
横竖屏切换的生命周期:
onPause() -->onSaveInstanceState()–>onStop()–>onDestroy()–>onCreate()
–>onStart()–>onRestorelnstanceState()–onResume()
- 资源内存不足的情况下导致优先级低的activity 的被杀死。
- 前台activity-----正在和用户进行交互activity的优先级最高
- 可见但是非前台activity—比如activity的一个弹框,导致activity可见但是在后台不可操作
- 后台activity—已经被暂停的activity,比如执行了onStop(),优先级最低
当系统内存不足时,会按照上面的优先级进行目标杀死activity。
activity的启动模式
通过官方文档了解到activity一共有四种启动模式。分别是:
- standard
标准模式,系统默认的模式,每次创建Activity都会重现创建一个新的实例,不管这个实例是否已经存在,生命周期符合典型的生命周期.这种模式下,谁启动了这个Activity,这个Activity就会运行在启动它的那个Activity所在的栈中.
- singleTop
栈顶复用模式:这种模式下,如果当前Activity已经位于任务栈的顶部,则不会重新创建实例,只会回调其newIntent方法,也不会重走生命周期,如果不在栈顶,则创建实例.
- singleTask
栈内服用模式:这种模式下,如果栈内存在Activity的实例,则将其上面的所有Activity出栈,直到那个Activity处于栈顶为止,只会回调其newIntent方法,如果不存在,则创建实例.
- singleInstance
单实例模式.相当于加强版的singleTask模式,除了具有singleTask的特性之外,还加了一点,就是使用此模式的Activity只能单独的处于一个任务栈中。
四种启动模式应用场景
- standard 模式:
没有特殊需求的都默认使用的这个模式
- singleTop模式
使用于通过通启动的Activity.例如新闻推送,显示新闻详情的界面就应该设置为singleTop,因为如果每一次点击通知启动新闻详情都打开一个Activity,回退的时候会有很不好的体验
- singleTask 模式
适用于会被其他程序调起但是不想显示之前界面的Activity,例如浏览器,不管被多少个应用访问网站功能调用,都显示的是主界面
- singleInstance 模式
适用于与程序分开的页面,比如闹钟提醒,闹钟的提醒界面和闹钟的设置界面就应该分开。
activity的三种运行状态
- Resumed(活动状态)
此状态又叫做running状态,这个activity 正在屏幕上下显示,并且有用户焦点,就是用户正在操作的那个activity。
- Paused(暂停状态)
这只一个不常见的状态。这个activity在屏幕上是可见的,但是并不是在屏幕最前端的那个activity,比如:当前activity的一个弹窗,并且完全遮住此activity。
- Stopped(状态)
当activity完全不可见时会出于此状态,此时activity还在后台运行,让然在内存中,但是并未销毁,比如:跳转到另外一个页面。此时的activity就是出于暂停状态。
标签:生命周期,Activity,用户,模式,面试,onPause,activity,Android 来源: https://blog.csdn.net/qq_39469700/article/details/117431672