applicationDidEnterBackground和网络请求

时间:2014-01-20 00:59:30

标签: ios asihttprequest

我有一个iOS游戏,我可以跟踪玩家在会话中玩的关卡数量。会话对应于用户按主屏幕上的应用程序图标和按主页按钮离开应用程序之间的时间段。

令人惊讶的是,我似乎没有为我的大部分用户获得离开事件。我已经实现了如下日志传输:

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    ...
    [[EventLogger sharedEventLogger] pushEvent:LEAVE_GAME];
}

...其中EventLogger使用ASIHTTP库发送异步 HTTP POST请求。

可能是系统在传输完成之前抢占了传输吗?可能是应用程序崩溃而且从未达到过这一点,但这不太可能。

1 个答案:

答案 0 :(得分:1)

您是否阅读过documentation这种方法?

“您应该使用此方法释放共享资源,保存用户数据,使计时器无效,并存储足够的应用状态信息,以便将应用恢复到当前状态,以防以后终止。还应该禁用应用程序用户界面的更新,并避免使用某些类型的共享系统资源(例如用户的联系人数据库)...... 您执行此方法大约需要五秒钟才能执行任何任务并返回来从系统请求额外的执行时间:实际上,您应该尽快从applicationDidEnterBackground返回:如果方法在时间用完之前没有返回,则应用程序将终止并从内存中清除。“

对我来说听起来像你正在做的事情没有建议这个方法,但你可以尝试使用这个beginBackgroundTaskWithExpirationHandler。

我无法确定这是您的问题的解释,但它似乎是合理的,并且与仅仅为您的部分用户记录的事实相符。

也可能有用: 当按下主页按钮时,系统发送UIApplicationDidGoToBackground通知。