我应该在哪里执行可达性检查?
Posted
技术标签:
【中文标题】我应该在哪里执行可达性检查?【英文标题】:Where should I perform a Reachability check? 【发布时间】:2010-10-17 14:54:07 【问题描述】:我想检查有效的网络连接。我遵循了 Apple 的 Reachability 示例并将我的支票放入 applicationDidFinishLaunching
#pragma mark -
#pragma mark Application lifecycle
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
if(getenv("NSZombieEnabled") || getenv("NSAutoreleaseFreedObjectCheckEnabled"))
NSLog(@"NSZombieEnabled/NSAutoreleaseFreedObjectCheckEnabled enabled!");
// Override point for customization after application launch.
[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(reachabilityChanged:) name: kReachabilityChangedNotification object: nil];
//Check for connectivity
internetReach = [[Reachability reachabilityForInternetConnection] retain];
[internetReach startNotifer];
[self updateInterfaceWithReachability: internetReach];
[window addSubview:navigationController.view];
[window makeKeyAndVisible];
return YES;
但是,我的应用程序有时会崩溃并显示错误 Application Failed to Launch in Time
我在这里发布了我的崩溃问题:Application Failed to Launch in Time
我不确定应该在哪里执行可达性检查?
【问题讨论】:
【参考方案1】:根据网络状况,可达性检查可能需要很长时间(30 秒或更长时间)。但是,如果您的应用程序的 UI 在几秒钟内(远少于 30 秒)没有响应,则操作系统会假定它已死并杀死它。
如果您在后台线程而不是 UI 线程中进行可达性检查,那么您的 UI 将保持响应状态,操作系统和用户都不会认为您的应用已锁定或崩溃。
【讨论】:
我在后台线程中执行它仍然得到同样的错误:***.com/questions/3979065/…【参考方案2】:在-applicationDidBecomeActive
中,您可以在后台调用一个方法,该方法使用带有-performSelectorInBackground:withObject:
的可达性代码。
【讨论】:
为什么我不能把它放在ApplicationDidFinishLaunching中? 您不想在每次应用程序激活时对其进行测试吗?在 ios 4 多任务处理中,这种情况经常发生。以上是关于我应该在哪里执行可达性检查?的主要内容,如果未能解决你的问题,请参考以下文章