2009-05-22 118 views
2

我正在iPhone上开发一个需要互联网连接的网络应用程序。但是,一旦我登录到服务器并将iPhone保持闲置一段时间,iPhone会进入睡眠模式并断开我的网络连接(它会将我注销)。在iPhone上丢失网络连接

如果我在iPhone上运行相同的应用程序,而iPhone通过USB电缆连接到PC,它不会丢失其网络连接。

在info.plist文件中,我添加了这两个标志,但似乎没有任何影响。

UIRequiresPersistentWifi - >真 SBUsesNetwork - 整 - > 3

我错过了什么?您能不能让我知道我如何确保网络连接在应用程序的整个生命周期中持续存在?

回答

1

你是什么意思“注销我”在这里?在网络层面,没有“登录”(*)。只有数据包。你发送它们或者你不发送。那么你的服务器进程是否有一些期望的数据包或消息定期到达?如果是这样,那么你必须发送它们,这意味着你不能闲置(idleTimerDisabled = YES)。如果您控制服务器,最好不要过多地与它交谈。但是,这一切都发生在网络层以上。

UIRequiresPersistentWifi意味着Wifi应用程序在您的应用程序正在运行时仍保持打开状态,即使您不说话也是如此。这对于接收数据很重要。否则,你会在30分钟后退出网络,而其他人无法与你通话。它应该在Info.plist中设置,但这当然在您的应用程序包中。如果不是,你的应用程序不会启动,所以这不是问题。

(*)单元网络确实有登录的概念,但这不是导致您的问题的原因。

4

在您的应用程序委托(“的appDelegate”),在+initialize方法禁用空闲计时器:

myApp.idleTimerDisabled = YES; 

注意,这将让你的iPhone睡觉,而你的应用程序是开放的。这可能会导致电池寿命问题。

另一种选择可能是设置一个后台线程,以定时的方式打开一个小的CFStream

+0

感谢您的回复。我认为myApp.idleTimerDisabled = YES;将不是一个可行的解决方案。我想知道关于UIRequiresPersistentWifi选项。它应该工作。我需要在我的项目中的某个地方包含info.plist文件吗? – ebaccount 2009-05-22 18:54:30

+0

我想添加一点,我定期向服务器发送Keepalive。但是我使用套接字()(不是CFStream) – ebaccount 2009-05-22 18:56:06