【问题标题】:Can an activity handle onBackPressed() before onCreate() is finished?活动可以在 onCreate() 完成之前处理 onBackPressed() 吗?
【发布时间】:2020-04-23 15:22:47
【问题描述】:

标题不言自明:我想知道新活动是否可以在 onCreate() 完成之前处理 onBackPressed()。换句话说,在生命周期的哪个阶段,软后退按钮触摸的处理转移到了新创建的活动?

提前致谢。

【问题讨论】:

  • 创建,附加活动和onBackpressed都在主循环线程上同步调用,我相当肯定在onCreate的生命周期链之前触发任何按钮/触摸/键盘回调是不可能的-> @987654322 @ -> onResume 结束。
  • 这是否意味着如果用户在 onCreate() 期间按下后退按钮,onBackPressed() 将在新活动的 onResume() 之后调用?还是会被之前的activity调用?
  • 您可以通过在 onCreate 中添加 Thread.sleep 来自己进行快速测试。我这样做了,我得到的是按键将被延迟到onResume 完成,然后您将在onKeyDown/onKeyUp 方法中收到它们,KEYCODE_BACKonBackPressed 本身不会被触发。
  • 我现在明白了,谢谢。但这又给我带来了另一个问题:如果主线程正在做一些工作,而用户按下了返回按钮,会不会中断主线程来处理它?换句话说,我什么时候可以期待 onBackPressed() 被调用?随时?

标签: android android-activity android-lifecycle android-softbuttons


【解决方案1】:

onBackPressed() 直到 activity 启动后才会启动,即在 onResume() 完成之后。发生这种情况是因为 activity 需要按字面意思在前面,即在堆栈的顶部并且在屏幕上处于活动状态,以便发生后按。您将无法在 activity's 生命周期中的 onCreate() 之前或之后启动 onBackPressed()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多