Activity常见问题

本文详细探讨了Android Activity的生命周期,包括不同状态的回调方法及其顺序,弹出Dialog对Activity的影响,onActivityResult的回调时刻,Activity显示延迟的原因,通过URL Scheme打开Activity的配置与使用,以及何时会触发Activity的重建。同时,解释了在onResume方法中写死循环会导致ANR的情况。
摘要由CSDN通过智能技术生成

Activity常见问题

通过这篇博客,我们能知道以下问题:

  1. Activity 各种情况下的生命周期
  2. 弹出 DialogActivity 生命周期有什么影响?
  3. onActivityResult() 在哪两个生命周期之间回调?
  4. ActivityonResume() 之后才显示的原因是什么?
  5. 通过 Sheme 协议打开 Activity
  6. Activity 什么时候会发生重建?
  7. ActivityonCreate() 方法里写死循环会 ANR 吗?

1. Activity 生命周期方法相关

生命周期的回调方法

Activity生命周期的回调主要有 onCreate()onRestart()onStart()onResume()onPause()onStop()onDestory() 几个方法。

调用时机说明:

  • onCreate():系统创建 Activity 时触发,用来初始化 Activity 的基本组件。
  • onRestart():当处于“已停止”状态的 Activity 即将重启时,系统就会调用此回调。
  • onStart()Activity 将进入“已启动”状态,并对用户可见。
  • onResume():系统会在 Activity 开始与用户互动之前调用此回调。此时,该 Activity 位于 Activity 堆栈的顶部,并会捕获所有用户输入
  • onPause():当 Activity 失去焦点并进入“已暂停”状态时,系统就会调用此回调。
  • onStop():当 Activity 对用户不再可见时,系统就会调用此回调。
  • onDestory():系统会在销毁 Activity 之前调用此回调。此回调是 Activity 接收的最后一个回调。通常,实现 onDestroy() 是为了确保该 Activity 的所有资源。

onStart()onStop() 是从 Activity 是否可见来回调的,onResume()onPause() 是从 Activity 是否位于前台来回调的。

在生命周期里几种状态:

  • Activity 的整个生命周期发生在 onCreate()onDestroy() 之间,在 onCreate() 中执行“全局”状态设置(例如状态布局),并在 onDestroy() 中释放资源。

  • Activity 的可见生命周期发生在 onStart()onStop() 之间,在这段时间内Activity对用户可见。在整个生命周期中,当 Activity 在对用户可见和隐藏俩种状态中交替变化时,系统会多次调用 onStart()onStop()

  • Activity 的前台生命周期发生在 onResume()onPause() 之间,Activity位于其他 Activity 之前(栈顶位置),可与用户交互并具有输入焦点。但状态改变频繁,系统会多次调用 onResume()onPause(),建议做些轻量级操作。

打开Activity时两个Activity的生命周期方法的回调顺序

当一个 Activity 启动另一个 Activity 时,它们都会经历生命周期转换。第一个 Activity 停止运行并进入“已暂停”或“已停止”状态,同时创建另一个 Activity

  • Activity A 启动 Activity B,B ActivitylaunchModestandard 或者 B Activity 没有可复用的实例时: A.onPause() -> B.onCreate() -> B.onStart() -> B.onResume() -> A.onStop() --> A.onDestory()(如果需要关闭Activity A[A 被移出栈])

  • Activity A 启动 Activity B,B ActivitylaunchModesingleTop且 B Activity 已经在栈顶时(一些特殊情况如通知栏点击、连点、B Activity自己打开自己),此时只有 B 页面自己有生命周期变化:B.onPause() -> B.onNewIntent() -> B.onResume()

  • 当 B ActivitylaunchModesingleInstancesingleTask 且对应的 B Activity 有可复用的实例时:A.onPause() -> B.onNewIntent() -> B.onRestart() -> B.onStart() -> B.onResume() -> A.onStop() --> A.onDestory()(如果需要关闭Activity A[A 被移出栈])

  • 当 B ActivityThemeDialog 时:A.onPause() -> B.onCreate() -> B.onStart() -> B.

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值