• Android -- 每日一问:怎么理解 Activity 的生命周期?


    02.jpg

    典型回答

    image.png

    如果一个 Activity 在用户可见时才处理某个广播,不可见时注销掉,那么应该在哪两个生命周期的回调方法去注册和注销
    BroadcastReceiver 呢?

    Activity 的可见生命周期发生在 onStart调用与 onStop调用之间。在这段时间,用户可以在屏幕上看到 Activity 并与其交互。我们可以在 onStart中注册一个BroadcastReceiver 以监控影响 UI 的变化,并在用户无法再看到您显示的内容时在
    onStop 中将其取消注册。

    如果有一些数据在 Activity 跳转时(或者离开时)要保存到数据库,那么你认为是在 onPause 好还是在 onStop
    执行这个操作好呢?

    onPause 较容易被触发,所以我们在做 BroadcastReceiver 注销时放在onStop要好些。onPause 时 Activity 界面仍然是可见的,如弹出一个 Dialog 时。但在保存数据时,放在 onPause 去做可以保证数据存储的有效性,如果放在 onStop 去做,在某些情况下 Activity 走完 onPause 后有可能还没顺利走到 onStop 就被系统回收了。

    但要注意在 onPause 中要非常迅速地执行完所需操作,不然会影响到下一个 Activity 的生命周期函数的调用。

    简单说一下 Activity A 启动 Activity B 时,两个 Activity 生命周期的变化。

    当一个 Activity 启动另一个 Activity 时,它们都会发生生命周期转变。第一个 Activity 暂停然后停止(但如果它在后台仍然可见,则不会停止,比如 B 是半透明的),系统会创建另一个 Activity。 如果这两个 Activity 共用保存数据到文件或者数据库,必须要注意,在创建第二个 Activity 前,第一个 Activity 不会完全停止。更确切地说,启动第二个 Activity 的过程与停止第一个 Activity 的过程存在重叠。

    以下是当 Activity A 启动 Activity B 时一系列操作的发生顺序:
    Activity A 的 onPause 方法执行。
    Activity B 的 onCreate、onStart 和 onResume 方法依次执行。
    然后,如果 Activity A 在屏幕上不再可见,则其 onStop 方法执行。

    你的朋友是不是也在准备面试呢?你可以“请朋友读”,把今天的题目分享给好友,或许你能帮到他。

  • 相关阅读:
    Java HashSet
    LeetCode每日一题(720. Longest Word in Dictionary)
    Java版分布式微服务云开发架构 Spring Cloud+Spring Boot+Mybatis 电子招标采购系统功能清单
    大型分布式系统下缓存应该怎么玩,才能用得高效
    C++11 多线程 (上)
    Node.js编译失败怎么办?
    青少年python系列 43.导入类
    高数 |【23数一 李林六套卷】卷一 自用思路 及 知识点 整理
    Qt listWidget 详细分析
    Codeforces Round 901 (Div. 2) - C. Jellyfish and Green Apple - 思维+位运算
  • 原文地址:https://blog.csdn.net/duoduo_11011/article/details/127986469