ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Android面试基础总结之Activity

2021-05-31 22:58:18  阅读:255  来源: 互联网

标签:生命周期 Activity 用户 模式 面试 onPause activity Android


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 的被杀死。
  1. 前台activity-----正在和用户进行交互activity的优先级最高
  2. 可见但是非前台activity—比如activity的一个弹框,导致activity可见但是在后台不可操作
  3. 后台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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有