2012-02-03 62 views
1

我上跟踪用户的位置在一个时间间隔由用户自己(例如每5分钟)设置,并将其发送到服务器的应用程序工作页面ASIHTTPRequest应用程序将无法重新启动 - iPhone

这个程序应该可以在前台接收更新,无论是背景,甚至当应用程序没有运行(位置服务)。
虽然我的应用程序成功接收的前景和背景,它似乎并没有醒过来,当它不运行,不要送我到服务器的任何请求更新。

我在使用CLLocationManager及其代表执行startMonitoringSignificantLocationChanges,因为它在背景上。

Settings上,我的应用程序的图标在Location Services上出现紫色箭头。

在我info.plist,我有Required Background Modes设置的,需要和方法的项目locations

locationManager:didUpdateToLocation:fromLocation: 
locationManager:didFailWithError: 

实现。

我的方法:

(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

也被实现,并检查是否 包含launchOptions开始UIApplicationLaunchOptions- LocationKey的显著位置监控时应该唤醒/重新开张了。

有什么办法,我可以找出是否我的应用程序是真正被重新启动?
是否有任何额外的配置,需要设置为了这个工作?

请让我知道我是否应该提供任何额外的信息。


规格我使用:
SDK的Xcode 4.2.1
CLLocation是一个Singleton类中(读的地方,这可能影响)
iOS的部署目标:4.3
在测试了iPhone 3GS,4和Xcode的iOS 5模拟器,所有这些设备都会发生相同的行为。
设备:通用


UPDATE

我插入我的代码里面-[UIApplication beginBackgroundTaskWithExpirationHandler:]并试图核对错误与UIBackgroundTaskInvalid。但是,它似乎甚至没有输入(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法。

我通过使用SQLite试图保存和检索数据来跟踪应用程序。当在前景和背景上执行时,它都会记录没有问题的数据。当应用程序没有运行时,根本没有数据被保存。

回答

1

您目前如何检查应用程序是否重新启动?你记录什么?

该应用程序将重新启动到后台,所以你不会看到你的应用程序活着。它会在一段时间后自动关闭。您可以使用-[UIApplication beginBackgroundTaskWithExpirationHandler:]做一些工作并请求更多背景时间。

此处的另一个答案SO贴some example code。从你的描述中我看不出任何遗漏,将你的代码与该项目进行比较,看看你是否缺少了一些东西。

+0

嗨Joris,感谢您的快速回复,我在帖子上发布了更新权,以便我可以写更多。 – 2012-02-06 19:51:20

+0

谢谢Joris,最终成为问题。我的背景任务耗时太长。 – 2012-02-08 10:47:11