【问题标题】:Activity lifecycle callbacks no fininshing execution?活动生命周期回调没有完成执行?
【发布时间】:2018-10-05 01:15:03
【问题描述】:

活动生命周期回调是否有可能在执行其所有代码之前被中断?回调可以中断另一个吗?

https://developer.android.com/guide/components/activities/activity-lifecycle

在本文档中,它建议不要在 onPause 中执行繁重的工作,例如,因为它有一个“非常短暂的执行”,谁来控制它?如何?即使 onPause 还没有完成执行,系统是否会调用下一个生命周期回调?

【问题讨论】:

    标签: android activity-lifecycle


    【解决方案1】:

    文档建议onResume()/onPause() 快速执行以获得更好的用户体验,因为这些方法被频繁调用。 Android 活动回调始终按顺序执行。它们只能被一个未捕获的异常中断,该异常将终止整个应用程序。

    【讨论】:

      【解决方案2】:

      这些调用将主要影响 UI(以及 onCreate、onCreateView),如果它们需要很长时间来完成代码,用户肯定会知道。

      假设你的 onResume() 方法中有这个

      OnResume(){ super.onResume; updateView(); }
      

      一些标准,这是在片段或活动“恢复”之前通常发生的事情。

      如果你的 updateView();需要 2 秒才能完成,因为它正在加载数据或创建对象,即 UI 被“冻结”并且用户无法使用应用程序的 2 秒,或者可能误认为“已损坏”

      如果你对 onPause() 有相同的理论场景,那么这也是应用程序中 2 秒的“冻结”时间

      最好让“updateView()”(本质上是您的 onResume 和 onPause 方法)尽快完成,这样用户就不会注意到应用程序中的任何“滞后”。

      【讨论】:

      • 所以这只是性能考虑?在完全完成其代码执行之前,这些回调之一不可能被中断吗?我的意思是这些方法只是由另一个事件触发的回调,这个事件不可能在前一个事件完成执行之前发生新的回调快速连续发生吗?在那种情况下会发生什么?新的事件回调会排队等待前一个回调完成还是会中断它?
      • 我想说它不能完成完整代码块的唯一方法是致命的异常错误,导致应用程序本身崩溃并关闭。但即使没有,它也会导致某种类型的“脱离上下文”错误(不完全确定如何调用它),因此对该调用的任何计算都可以,但如果你尝试说 getActivity 它会抛出错误().finish() 因为 getActivity() 将返回 null,因为它已被 GC 处理
      猜你喜欢
      • 1970-01-01
      • 2014-05-18
      • 1970-01-01
      • 1970-01-01
      • 2013-01-13
      • 2011-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多