💪
AndroidCollect
  • 写在前面
  • 计算机基础
    • 计算机组成原理
    • 算法
      • 查找
        • 二分查找
      • 排序
        • 简单排序
        • 高级排序
        • 特殊排序
      • 海量数据
      • 思想
        • 贪心
        • 分治
        • 动态规划
        • 回溯
      • 哈希算法
    • 数据结构
      • 队列
        • 知识点
        • 相关题目
          • 用两个栈实现队列
          • 实现循环队列
          • 用链表实现队列
          • 用数组实现队列
      • 栈
        • 相关算法题目
          • 用链表实现栈
          • 用数组实现栈
      • 链表
        • 知识点梳理
        • 相关算法题目
          • 删除倒数第n个结点
          • 合并两个有序链表
          • 检测单链表是否有环
          • 获取中间结点
          • 反转链表
      • 跳表
      • 哈希表
      • 树
        • 二叉树
        • 二叉查找树
        • AVL 树
        • Trie 树
        • 红黑树
      • 堆
        • 存储
        • 堆的应用
      • 图
    • 网络
      • 应用层协议
        • DNS
        • HTTP
        • HTTPS
      • 传输层协议
        • TCP
        • UDP
      • 输入网址后发生了什么
    • 操作系统
      • 内存
    • 数据库
  • 软件工程
    • 编程思想
    • 设计模式
      • 状态模式
      • 装饰器模式
      • 代理模式
      • 责任链模式
      • 建造者模式
      • 单例模式
      • 观察者模式
  • Java
    • 基础
    • 异常
    • 并发编程
      • ThreadLocal
      • 线程池
      • 理解 volatile
      • AbstractQueuedSynchronizer
    • 集合
      • LinkedHashMap 源码
      • HashMap 源码
    • 注解
    • 反射
      • JDK 动态代理
    • JVM
      • 自动内存管理机制
      • Class 文件格式
      • 类加载机制
      • Java 内存模型(JMM)
      • 字节码指令
      • HotSpot 虚拟机实现细节
    • 源码与原理
    • 各版本主要特性
  • Android
    • 基础组件
      • Context
      • Activity
        • 生命周期
        • 启动模式与任务栈
        • 启动流程
      • Service
      • ContentProvider
      • BroadcastReceiver
      • Fragment
      • View
        • 常用控件问题总结
          • RecyclerView
          • ViewPager2
        • CoordinatorLayout
        • SurfaceView
        • 事件分发
        • 绘制流程
        • 自定义 View
        • Window
    • 数据存储
      • 存储结构
      • Sqlite
      • 序列化
      • SharedPreferences
    • 资源
      • 图片加载
    • 动画
      • 属性动画
    • 线程和进程
      • Binder 机制
      • 跨进程通信
        • AIDL
    • 内部原理
      • 消息循环机制
      • Binder
      • Window
      • SparseArray
      • ArrayMap
      • RecyclerView
      • App 启动流程
    • 性能优化
      • 内存
        • 内存使用优化
        • 内存泄漏
      • 启动优化
      • 缩减包大小
      • 布局优化
      • ANR
    • 打包构建
      • dex 文件
      • APK 打包流程
      • APK 签名流程
    • 架构
      • 运行时
      • Android 系统架构
      • 应用项目架构
    • 开源框架源码或原理
      • RxJava
        • 使用笔记
        • 源码解析
      • Retrofit
      • ButterKnife
      • BlockCanary
      • LeakCanary
      • OkHttp
      • 图片加载
        • Glide
        • Picasso
    • 碎片化处理
      • 屏幕适配
    • 黑科技
      • 热修复
    • Jetpack
      • Lifecycle
      • Room
      • WorkManager
    • 新动态
      • AndroidX
      • 各系统版本特性
  • 开发工具
    • 正则表达式
    • ADB
    • Git
  • Kotlin
  • Flutter
  • 关于作者
  • 致谢
由 GitBook 提供支持
在本页
  • 官方文档
  • onStart()和onResume()的区别?
  • onPause()和onStop()的区别?
  • onCreate
  • onDestroy
  • Activity A启动另一个Activity B会回调哪些方法?如果Activity B是完全透明呢?如果弹出的是一个Dialog呢?
  • 保存状态
  • 谈谈onSaveInstanceState()方法?何时会调用?
  • onSaveInstanceState() 与 onPause() 的区别?
  • 其他问题
  • 如何避免配置改变时 Activity 重建?(自行处理运行时配置变更)

这有帮助吗?

  1. Android
  2. 基础组件
  3. Activity

生命周期

上一页Activity下一页启动模式与任务栈

最后更新于5年前

这有帮助吗?

onStart()和onResume()的区别?

onStart() 调用后时 Activity 可见但是不可交互,onResume() 调用后 Activity 处于前台并具有焦点,可以处理用户交互。

onPause()和onStop()的区别?

onCreate

首次创建Activity 时进行调用,需要调用setContentView设置布局。

onDestroy

Activity 被销毁前调用。

Activity A启动另一个Activity B会回调哪些方法?如果Activity B是完全透明呢?如果弹出的是一个Dialog呢?

Activity A 启动 Activity B:

弹出 Dialog 不会影响生命周期回调,因为 Dialog 是通过在 Window 中添加 View 的方式展示的。

如果Activity B 是完全透明的,那么Activity A 此时是可见的,所以不会调用Activity A 的onStop 方法。

保存状态

谈谈onSaveInstanceState()方法?何时会调用?

当系统为了恢复内存而销毁Activity前或者配置变更(屏幕方向、语言等)时,会调用这个方法,系统会传入一个Bundle 对象用于存储要恢复的数据。显式销毁(按下返回键)Activity时不会调用。

当Activity 重建时,可以在onCreate或者onRestoreInstanceState方法中拿到保存的数据。

Activity 的 onSaveInstanceState 的默认实现会调用 View 的onSaveInstanceState用于恢复View状态(需要为View 指定 id),比如EditText的输入文本等。

onSaveInstanceState() 与 onPause() 的区别?

其他问题

如何避免配置改变时 Activity 重建?(自行处理运行时配置变更)

onPause() 时,另一个 Activity 位于屏幕前台并具有用户焦点,但此时的 Activity 仍可见。也就是说,另一个 Activity 显示在此 Activity 上方,并且该 Activity 部分透明或未覆盖整个屏幕。 暂停的 Activity 处于完全活动状态( 对象保留在内存中,它保留了所有状态和成员信息,并与窗口管理器保持连接),但在内存极度不足的情况下,可能会被系统终止。不一定会调用onStop和onDestroy方法,所以应该尽量将重要数据保存的操作放到onPause方法中,但不能太耗时,否则会减免Activity 跳转速度,影响用户体验。

onStop 时,Activity 被另一个Activity完全覆盖,处于「后台」状态,对用户不可见。 已停止的 Activity 同样仍处于活动状态( 对象保留在内存中,它保留了所有状态和成员信息,但未与窗口管理器连接)。 不过,在需要释放内存时可能会被系统终止。

Activity A 的 方法执行。

Activity B 的 、 和 方法依次执行。(Activity B 现在具有用户焦点。)

然后,如果 Activity A 在屏幕上不再可见,则其 方法执行。

onPause()是Activity生命周期的一部分,是明确会被调用的方法,而onSaveInstanceState方法并不能保证系统会调用,因此只应该利用它来记录 Activity 的瞬态(UI 的状态);存储持久性数据应在 方法中进行。

在清单文件中编辑相应的 元素,增加 属性,该属性的值表示要处理的配置。最常用的值包括 "orientation"、"screenSize" 和 "keyboardHidden"。"orientation" 值可在屏幕方向发生变更时阻止重启。"screenSize" 值也可在屏幕方向发生变更时阻止重启,但仅适用于 Android 3.2(API 级别 13)及以上版本的系统。若想在应用中手动处理配置变更,必须在 android:configChanges 属性中声明 "orientation" 和 "screenSize" 值。可以在属性中声明多个配置值,方法是用| 字符将其进行分隔。

这样当其中某个配置发生变化,Activity 也不会重启。但会接收到对 的调用消息。此方法会收到传递的 对象,从而指定新设备配置。可以通过读取 中的字段确定新配置,然后通过更新界面所用资源进行适当的更改。调用此方法时,Activity 的 对象会相应地进行更新,并根据新配置返回资源,以便在系统不重启 Activity 的情况下轻松重置界面元素。

Activity
Activity
onPause()
onCreate()
onStart()
onResume()
onStop()
onPause()
<activity>
android:configChanges
onConfigurationChanged()
Configuration
Configuration
Resources
官方文档
Activity 生命周期
保存 Activity 状态