【Android】1.1 Activity学习与面试重点详解

什么是Activity?
虽然Activity是我们开发过程中最常用的组件,但是别人这样一问肯定还是会有点蒙。
在Android应用中,Activity是与用户交互的接口,提供界面让用户点击、滑动等操作。

本章目录

一、Activity生命周期

1. Activity的4种状态

running / paused / stopped / killed

  • running
    活动状态,用户可以点击屏幕并作出响应,处于Activity栈顶
  • paused
    失去焦点,无法与用户交互,被非全屏或透明Activity占据焦点
  • stopped
    不可见,被其他Activity完全覆盖
  • killed
    被回收掉

2. Activity生命周期分析

  • 启动
    onCreate() -> onStart() -> onResume()
  • 点击Home键回到主界面
    onPause() -> onStop()
  • 当我们再次回到Activity时
    onRestart() -> onStart() -> onResume()
  • 退出当前Activity
    onPause() -> onStop() -> onDestroy()

【Android】1.1 Activity学习与面试重点详解

  • onCreate() 创建活动
  • onStart() 可见不可交互
  • onResume() 可交互
  • onPause() 暂停状态
  • onStop() 停止
  • onDestroy() 正在被销毁
  • onRestart() 不可见变为可见

3. Android进程优先级

前台 / 可见 / 服务 / 后台 / 空

  • 前台
    与用户正在交互的Activity,或绑定在前台进程的Service
  • 可见
    可见但不可交互的Activity
  • 服务
    后台开启的Service
  • 后台
    按Home键后不可见

  • 处于缓存目的保留,以上四种之外的

二、Android任务栈

【Android】1.1 Activity学习与面试重点详解

  • android任务栈又称为Task,它是一个栈结构,具有后进先出的特性,用于存放我们的Activity组件。
  • 我们每次打开一个新的Activity或者退出当前Activity都会在一个称为任务栈的结构中添加或者减少一个Activity组件,因此一个任务栈包含了一个activity的集合, android系统可以通过Task有序地管理每个activity,并决定哪个Activity与用户进行交互:只有在任务栈栈顶的activity才可以跟用户进行交互。
  • 在我们退出应用程序时,必须把所有的任务栈中所有的activity清除出栈时,任务栈才会被销毁。当然任务栈也可以移动到后台, 并且保留了每一个activity的状态. 可以有序的给用户列出它们的任务, 同时也不会丢失Activity的状态信息。
  • 需要注意的是,一个App中可能不止一个任务栈,某些特殊情况下,单独一个Actvity可以独享一个任务栈。还有一点就是一个Task中的Actvity可以来自不同的App,同一个App的Activity也可能不在一个Task中。

三、Activity启动模式

1. Standard(默认)

每次新创建Activity,压入栈顶

2. SingleTop(栈顶复用)

检测任务栈顶是否存在该Activity,若存在则直接复用,调用 onNewIntent() 方法

3. SingleTask(栈内复用)

检测整个任务栈是否存在Activity,若存在则置于栈顶,并把栈上部的其他Activity销毁

4. SingleInstance(单一实例模式)

  • 以singleInstance模式启动的Activity具有全局唯一性,即整个系统中只会存在一个这样的实例。
  • 以singleInstance模式启动的Activity在整个系统中是单例的,如果在启动这样的Activiyt时,已经存在了一个实例,那么会把它所在的任务调度到前台,重用这个实例。
  • 以singleInstance模式启动的Activity具有独占性,即它会独自占用一个任务,被他开启的任何activity都会运行在其他任务中。
  • 被singleInstance模式的Activity开启的其他activity,能够在新的任务中启动,但不一定开启新的任务,也可能在已有的一个任务中开启。

四、Scheme跳转协议

页面内跳转协议,如通知栏、H5、第三方APP跳转到本APP特定页面等