【问题标题】:What really is paused when an android activity goes into paused state?当 android 活动进入暂停状态时,真正暂停的是什么?
【发布时间】:2016-08-05 07:18:41
【问题描述】:

当一个活动进入暂停状态时,当它被另一个活动部分覆盖时会发生这种情况,究竟是什么进入了暂停状态?更准确地说:

  1. 它是否会暂停 Looper 处理传入的任务或消息,但仍允许在 Looper 消息队列中提交作业?
  2. 如果一个活动有一个信使,它从假设一个服务接收消息,信使队列是否也暂停处理任务,但它仍然可以接收消息?几乎像上面的案例没有。 1.
  3. 如果情况 1 或 2 或(1 和 2)有效,那么我不需要处理暂停状态的 UI 任务缓冲区(如帖子 How to handle Handler messages when activity/fragment is paused 中所建议的那样),因为一旦 Activity 恢复,它将开始处理消息队列,什么都不会丢失。我的假设是否正确?

我觉得应该是这样实现的,但不确定是不是这样。

【问题讨论】:

    标签: android activity-lifecycle


    【解决方案1】:

    通常,Activity 被暂停意味着它的 UI 元素不在最前面。 UI 线程仍在工作。这意味着 Looper 仍然可以处理消息。你提到的使者仍然可以工作。

    虽然 UI 元素可能不可见,但您仍然可以在后台更改它们的状态。例如,更改TextView 的文本。再次恢复 Activity 后,您可以看到此类更改。

    【讨论】:

    • 所以就像是,即使在 Activity 进入暂停状态之后,所有任务仍然由 Looper/Messenger 执行,但只是有条件地跳过渲染(有点暂停),其余都是一样的.
    • 那么当 Activity 停止时会发生什么。停止是什么意思?在这种情况下,Looper 是否已停止(/阻止任务提交)?因为在 onStop() 之后,当一个 Activity 出现在前面时,它会经过 onRestart() -> onStart() ->onResume(),在这种情况下,它必须做的事情比从 Paused 状态恢复时所做的事情更多。跨度>
    • 在我看来,停止的状态与 UI 更相关,例如UI 元素不可见。操作系统停止Activity,以便用户可以与其他Activities进行交互。
    • 我认为,您对暂停状态是正确的(尽管我必须进行实验),但是对于停止状态,完全停止进程(至少是 Looper 作业队列处理)更有意义,因为将系统资源用于不可见的 Activity 是没有意义的。这就是原因,如果这是我们想要的,Android 有 Service。
    • 我认为在停止状态下它不会处理队列中的任何内容。最好让 Service 知道 Activity 的状态,并在 Service 本身中缓冲所有内容。一旦活动重新启动,它应该咨询服务并进行渲染。我仍在寻找更准确的答案:)。
    【解决方案2】:

    用简单的话.... 当活动可见但未获得焦点时,活动处于暂停状态。 它在后台。

    【讨论】:

    • 感谢您的回复,但我正在寻找更多。我们知道它处于暂停状态,但我的问题是,从进程运行的角度来看,暂停状态意味着什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-20
    • 2020-10-30
    相关资源
    最近更新 更多