2012-02-10 49 views
1

我有一个奇怪的情况,客户简化版,希望自己的应用程序支持多任务,所以我在info.plist喜欢创造了一个标志,应用程序不会在后台运行,但是在我的应用程序终止之前,我仍然可以执行一些任务吗?

Application does not run in background = YES; 

但也有在应用程序生命周期倍,应用程序必须上传一些数据到服务器在它结束之前。如果没有,那么服务器将有模糊的数据,我的客户的公司(也可能是我......)将注定!

现在我的问题是,

  • 多少时间,我之前的操作系统将终止我的应用程序?有时数据可能很大,如果上网速度很慢,那么我可能需要更多时间。
  • 我看到这个方法beginBackgroundTaskWithExpirationHandler将这个工作在我的情况。如果我确实支持后台执行,我怀疑这可能会起作用。我对吗?

最后的问题,

  • 我能想到的任何其他的选择吗?
  • 我应该辞去iOS开发人员吗?

感谢

+0

我想你可以尝试UIApplicationExitsOnSuspend = YES和beginBackgroundTaskWithExpirationHandler在一起。这是一个快速测试,如果它能起作用,你就可以得到你想要的东西。 – anticyclope 2012-02-10 02:36:58

回答

2

我的建议是尝试这样的:

[[NSNotificationCenter defaultCenter] 
addObserver:self 
selector:@selector(saveWhatever) 
name:UIApplicationWillTerminateNotification 
object:nil]; 

只是把这些代码在你的类的init方法。一定要删除自己作为一个观察者viewDidUnload这样的:

[[NSNotificationCenter defaultCenter] removeObserver:self]; 

在这里,您可以保存任何你需要保存的,但我不知道如何上传数据。您最好的选择是将数据保存到文件中,然后在下次打开应用程序时,将文件中的数据异步上传到服务器。您可以尝试使用此通知上传它,但我不确定Springboard是否会等待发生这种情况。

+1

@dontCheckMyBlog - 你拥有的时间不确定,但不长。尝试在应用试图终止时尝试下载下载是心痛的秘诀。 Rickay是对的:设置某种标志并在下一次启动时进行下载。 (并且不要辞职,只要不断学习,那里的iOS开发人员就会大量短缺,推回要求。) – Rayfleck 2012-02-10 02:31:19

+1

良好的通话,以及不辞职的好建议。 iOS开发可能看起来像一个疯狂的世界,但Apple API是最容易实现的,并且是我见过的最好的文档。另外,如果您有太多不太复杂的数据,那么实施单身管理可以更快速地管理数据。否则,我会研究核心数据,尽管它不是入门级技术,正如Apple在文档中所指出的那样。祝你好运! – 2012-02-10 02:35:31

+0

@Rayfleck,大声笑谢谢,你们俩都很好的建议。 – doNotCheckMyBlog 2012-02-10 02:36:07

2

辞职?可能不会,但是在另一家具有现实期望的公司中寻找工作?肯定。根据我的经验,坚持设计理念和不听原因的客户更容易责怪开发商,因为这些都是梨形。

至于试图在终止时上传数据。不要这样做。在计时器假定挂起并杀死它之前,您的应用程序将获得多少时间,看门狗定时器不可预测。最近,当我开始制作一个应用程序随机失败的已建立项目时,我遇到了类似的情况。问题在于开发人员已将下载代码放入应用程序中:didFinishLaunchingWithOptions:方法。由于互联网延迟和服务器延迟问题,该方法耗时过长,应该将代码移至后台线程。

试图做终止,睡眠等相同的事情会有同样的问题,并没有已知的方式来阻止看门狗定时器杀死你的应用程序。

我的另一个问题是客户端为什么会抵制多任务处理?他们为什么关心?无论如何,它们实际上无法阻止它,因为它实际上是任何应用程序的一部分。我认为,如果他们不想多任务处理,他们也不希望任何形式的互联网访问或动画。因为如果不对这些内容进行线程化,您的用户界面很可能无法使用,从而为您带来很多1星评级和投诉。

+0

我完全理解,我猜想目前的一代计算必须面对这些有趣的设计选择。对于人们来说,很难抵制从桌面通勤到平板电脑和智能手机计算的巨大变化。他们只是没有得到这些东西!他们喜欢用一种非常复杂的方式来思考问题!哈哈(Desktopy)。 – doNotCheckMyBlog 2012-02-10 02:58:56

+1

你知道涉及的人 - 但有时这些事情不是客户很愚蠢,而是客户表示他们已经误解了某件事的含义(多任务处理),所以这可以通过仔细询问客户来看清楚如果他们真的知道他们在说什么:-) – drekka 2012-02-10 03:02:13

1

将数据上传到服务器时重要吗?在应用程序终止之前它是否必须正确?

如果没有,那么我有这样的建议:

在App委托方法applicationWillTerminate,编写所有的数据到一个文本文件,像mydata.txt,您的应用程序沙箱的文件系统(即在库/缓存目录:不能使用Document目录生成应用程序生成的文件Apple现在使用Document目录进行iCloud同步,因此将文件放在那里会导致应用程序被拒绝)。还需要将您的文件标记为不同步到iCloud属性。

然后在下次启动应用程序时,可以检查是否存在此“mydata.txt”文件。如果存在,请从中读取所有数据并上传到您的服务器。然后从Library/Cache文件夹中删除文件,以便下次不上传相同的数据。您可以在App Delegate的applicationDidFinishLaunching方法中执行此操作。

相关问题