Iphone,我怎样才能避免看门狗杀死我的应用程序需要很长时间才能启动?

Posted

技术标签:

【中文标题】Iphone,我怎样才能避免看门狗杀死我的应用程序需要很长时间才能启动?【英文标题】:Iphone, how can i avoid the watchdog killing my application for taking long time to launch? 【发布时间】:2011-01-17 10:51:26 【问题描述】:

通知看门狗我没有处于无限循环并且我仍在加载所以不要杀死我的应用程序的正确方法是什么?

我收到了我的崩溃日志 异常类型:00000020 异常代码:0x8badf00d 并且仅当从 iphone 独立于 xcode 运行应用程序时

代码耗时是:

- (void)viewDidLoad 
    [super viewDidLoad];
 Reachability* reachability = [Reachability sharedReachability];
 [reachability setHostName:@"www.apps2you.com"];    // set your host name here
 NetworkStatus remoteHostStatus = [reachability remoteHostStatus];

 if (remoteHostStatus == ReachableViaWiFiNetwork||remoteHostStatus == ReachableViaCarrierDataNetwork )
 
  //getting the xml file and then getting the ad images online to display as splah ads.
 
 else 
//or launch the main interface if there's no connectivity.
  [self DisplayTabbar];
 

谢谢。

【问题讨论】:

【参考方案1】:

如果您有一些需要很长时间的初始化,那么最好在新线程中运行它(通过performSelectorInBackground:withObject:)。然后,您的 UI 将以某种“锁定”状态启动。创建一个“解锁” UI 的方法。作为后台方法的最后一个操作,通过performSelectorOnMainThread:withObject:waitUntilDone: 运行该解锁方法。

重要的是不要阻塞主线程,以便运行循环可以响应 ios 事件。这就是为什么你应该避免sleep 或其他阻塞的东西。不过,阻塞在另一个线程中也没关系。此外,采用基于事件的编程方法也有很大帮助。

更新:

现在,最好使用dispatch_async 而不是performSelectorInBackground:withObject:。您仍然应该在 dispatch_async 块内创建一个新的 NSAutoreleasePool 以避免内存泄漏。

【讨论】:

我会试试的,我会把启动画面作为主屏幕,然后添加指示器视图。并像您说的那样在后台运行图像加载,然后返回给您。非常感谢, 启动画面很好,但我建议添加一个 UIActivityIndi​​catorView(又名“微调器”)来显示正在发生的事情。 啊,是的。您需要在后台方法中设置一个自动释放池。例如,请参阅 this 或 this 问题。 dispatch_async 仅在 GCD 认为有必要时才启动一个新线程(这可能代价高昂),否则它会从其线程池中重用一个。 performSelectorInBackground:withObject: 总是创建一个新线程。此外,dispatch_async 更灵活(您可以跳过创建 performSelectorInBackground:withObject: 所需的新方法)。 我建议您观看有关您感兴趣的主题的 WWDC 视频,您可以在那里学到很多有用的东西。除此之外:经验 ;-) 遇到问题,尝试解决问题,在途中学到东西。【参考方案2】:

我认为如果看门狗正在杀死您的应用程序,那么加载时间会太长,并且您的用户不会等待它。查看一些内存管理技术,您可能必须更好地构建您的项目。

可能有一种方法可以告诉看门狗不要杀死您的应用,但我保证您的加载时间会让您的用户感到沮丧,并且您的应用不会获得您想要的外展。

【讨论】:

如果主运行循环在 30 秒内没有向 iOS 报告(据我所知),iOS 正在杀死你的应用程序。它与内存管理无关,只是不阻塞主线程。 打开一个应用程序并计数 30 秒,加载内容时等待的时间相当长。管理你的内存和重组你的项目将释放主线程,从而使加载速度更快。我的观点是,目前,用户不想等待 30 秒的应用程序,移动就是即时和便携

以上是关于Iphone,我怎样才能避免看门狗杀死我的应用程序需要很长时间才能启动?的主要内容,如果未能解决你的问题,请参考以下文章

什么是看门狗它的原理 看门狗它的原理是什么

看门狗驱动程序

stm32独立看门狗和窗口看门狗的区别是啥

STM32入门笔记——窗口看门狗

STM32入门笔记——窗口看门狗

STM32之独立看门狗(IWDG)与窗口看门狗(WWDG)总结