如何做长时间的操作而不被看门狗杀死? 苹果手机

我有一个很less执行的重要操作。 在某些情况下,可能需要几分钟时间才能执行。 我的应用程序在50秒的操作后死亡。 如何避免?

我应该把它放在后台线程? 任何人都可以请在这里指出正确的方向。 我还没有find关于所谓的看门狗的任何有用的信息。 后台线程要走吗?

是的,您需要将此任务移至后台线程。 任何时间超过一分之一秒的任务都不能阻塞主线程。 忽略看门狗定时器,只有在极端条件下才会触发,您的应用程序在这个冗长的操作过程中完全没有响应触摸或其他事件,并且无法就此操作的进程向用户提供反馈。

看门狗定时器将杀死一个在很长一段时间内阻塞主线程的应用程序,使得应用程序对input无响应(我相信这个持续时间在启动时是20秒,但是我不确定它是什么时候应用程序正在运行)。 你不应该让你的应用程序到达监视器正在处理它的地步,因为这意味着你的应用程序处理事物的方式存在真正的问题。

将长时间运行的任务移动到后台线程本身就是一个冗长的主题,这就是为什么我build议在开始之前阅读Apple的“ 并发编程指南”(已更新)以及观看有关该主题的一些WWDCvideo。

不过,在我看来,处理长时间运行任务的最优雅的方法就是使用Grand Central Dispatch,在这种情况下

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ // Do your long-running task here dispatch_async(dispatch_get_main_queue(), ^{ // Do callbacks to any UI updates here, like for a status indicator }); }); 

将在全局并发队列之一的后台线程中触发您的任务。 主块中的小部分代码显示了如何从此后台任务中更新任何UI元素(如进度栏)。 一般来说,UI更新必须在主线程上执行(iOS 4.0有一些例外情况,但通常情况下仍然是一个好习惯)。

我也强烈build议在这个长时间运行的任务进行时增加一些视觉指示。 您的用户将会非常感激这一点,它会让您的应用程序看起来更快,即使它可能会运行相同的时间。

你可以在你的过程中偶尔碰到看门狗? 看门狗定时器只是在那里检测是否有东西坠毁。 他们并不是真的在忙于系统。

手机是否仍然能够响应用户在执行过程中按下主页button等操作?

编辑:这家伙build议使用后台线程

Interesting Posts