“a”的合理指标是什么;“长跑”;Android中的任务

“a”的合理指标是什么;“长跑”;Android中的任务,android,Android,在上下文中,我阅读了Tejas Lagvankar在上找到的Android线程机制的比较。在这篇文章中,以及在许多其他文章中,甚至在Android文档中,“长时间运行”任务被反复使用,但我还没有看到一个真正的定义,说明什么是长时间运行的任务 鉴于我们必须考虑基于应用程序API级别和其他支持的限定符的不同设备功能,将任务限定为“长时间运行”的下限是多少。(最好采用测量单位,如毫秒) 如果主线程被阻塞超过5秒,Android将声明“应用程序无响应”或ANR。实际上,用户注意到的延迟只有100毫秒,所

在上下文中,我阅读了Tejas Lagvankar在上找到的Android线程机制的比较。在这篇文章中,以及在许多其他文章中,甚至在Android文档中,“长时间运行”任务被反复使用,但我还没有看到一个真正的定义,说明什么是长时间运行的任务

鉴于我们必须考虑基于应用程序API级别和其他支持的限定符的不同设备功能,将任务限定为“长时间运行”的下限是多少。(最好采用测量单位,如毫秒)

如果主线程被阻塞超过5秒,Android将声明“应用程序无响应”或ANR。实际上,用户注意到的延迟只有100毫秒,所以这是一个“最坏情况”的起点。如果您的操作可以以任何方式阻止(文件I/O、图像解码、网络访问等),那么您应该遵从bg线程。

如果主线程被阻止超过5秒,Android将声明“应用程序无响应”或ANR。实际上,用户注意到的延迟只有100毫秒,所以这是一个“最坏情况”的起点。如果您的操作可以以任何方式(文件I/O、图像解码、网络访问等)阻塞,那么您应该遵从bg线程

我还没有看到一个真正的定义,什么才是长期运行的任务

这在很大程度上取决于具体情况。此外,您假设每个使用“长期运行”一词的人都以相同的方式这样做

将任务限定为“长期运行”的下限是多少

嗯,这不能用抽象的方式来回答

例如:

    > P>在避免“JANK”(丢弃帧)的上下文中,我认为“长时间运行”是任何超过1ms的回调。我们的许多回调需要作为UI呈现的一部分进行调用,如果调用的时间太长,我们可能会删除一个帧(即,在应该发生更新时不更新屏幕)。在实践中,如果您不丢弃帧,“长时间运行”的确切阈值取决于您,尽管从数学上讲,它显然必须明显小于16ms

    >p>在线程/<代码> AycCastase<代码>的上下文中,由活动分叉,由于活动被破坏(例如,后退按钮),结束是无意义的,我会考虑“长时间运行”是几百毫秒的顺序。

    >P>在存在过程终止风险的情况下,中断你的背景工作——如果你真的需要完成这项工作,要考虑使用一个服务的门槛——我会认为“长时间运行”大约是秒。

    >P>在设备处于睡眠状态的风险中,因此需要考虑<代码> WakeLock <代码>以保持CPU滚动,我认为“长时间运行”大约是15秒,因为这是用户可以指定的最低的不活动超时时间。假设用户是触发这一特定背景工作的人;在其他情况下(例如,
    AlarmManager
    ,GCM消息),您将需要一个
    WakeLock

  • 等等

虽然我的选择背后有一些数学因素,但最终,它们是我的选择,其他安卓专家可能还有其他选择

我还没有看到一个真正的定义,什么才是长期运行的任务

这在很大程度上取决于具体情况。此外,您假设每个使用“长期运行”一词的人都以相同的方式这样做

将任务限定为“长期运行”的下限是多少

嗯,这不能用抽象的方式来回答

例如:

    > P>在避免“JANK”(丢弃帧)的上下文中,我认为“长时间运行”是任何超过1ms的回调。我们的许多回调需要作为UI呈现的一部分进行调用,如果调用的时间太长,我们可能会删除一个帧(即,在应该发生更新时不更新屏幕)。在实践中,如果您不丢弃帧,“长时间运行”的确切阈值取决于您,尽管从数学上讲,它显然必须明显小于16ms

    >p>在线程/<代码> AycCastase<代码>的上下文中,由活动分叉,由于活动被破坏(例如,后退按钮),结束是无意义的,我会考虑“长时间运行”是几百毫秒的顺序。

    >P>在存在过程终止风险的情况下,中断你的背景工作——如果你真的需要完成这项工作,要考虑使用一个服务的门槛——我会认为“长时间运行”大约是秒。

    >P>在设备处于睡眠状态的风险中,因此需要考虑<代码> WakeLock <代码>以保持CPU滚动,我认为“长时间运行”大约是15秒,因为这是用户可以指定的最低的不活动超时时间。假设用户是触发这一特定背景工作的人;在其他情况下(例如,
    AlarmManager
    ,GCM消息),您将需要一个
    WakeLock

  • 等等


虽然我的选择背后有一些数学因素,但最终,它们是我的选择,其他安卓专家可能还有其他选择。

我不会试图用一定的时间来定义长时间运行的任务,而是根据任务的内容来定义。您可以在UI线程上成功地执行文件I/O操作,因为在您的测量中,它们需要几毫秒的时间,但可能会发生I/O阻塞,并且您的代码将导致ANR。另一个例子是,当解析json数据时,如果它很小,那么它会很快,但是如果它变大,那么它也可能导致ANR,或者甚至OOM(超出我的权限)