0

我正在开发一个执行任务“A”的应用程序- (void)applicationWillEnterForeground:(UIApplication *)application

该应用程序还注册了远程通知。在- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo应用程序中需要执行任务“B”。

当应用程序在后台并收到通知时,任务执行的顺序是“A”,然后是“B”。

如果收到通知并且应用程序在后台,我需要做的是只执行“B”任务。

怎么能做到这一点?

谢谢

4

1 回答 1

0

自从您发布此问题以来已经一个月了,所以我不确定您是否还需要答案,但是我通过将所有共享的“入口逻辑”(我喜欢这样称呼它)推送到applicationDidBecomeActive:并简单地存储入口方法来解决了这个问题作为 appdelegate 对象中的状态。因此,如果我从后台进入应用程序,那么我会设置一个标志。如果我通过通知进来,我存储通知消息(这样我可以智能处理通知入口逻辑)。如果我通过 url 进入,那么我会存储该 url。applicationDidBecomeActive:我看看我是从哪条路进来的。以下是我关注的状态:

  1. 通过点击应用图标新建应用实例(未设置状态)
  2. 通过点击应用程序图标或结束电话等从后台进入(仅输入前台标志集,仅此而已)
  3. 从 APNS 进来(通知数据已设置,注意这可能是新的应用程序实例或来自后台)
  4. 从 url 进来(设置了 url,注意这可能是新的应用程序实例或来自后台)

将所有必要的信息集中在一个地方,我可以智能地决定是要执行通知入口逻辑,还是执行简单的前台入口逻辑。

顺便说一句,这个流程图是无价的! http://www.cocoanetics.com/2010/07/understanding-ios-4-backgrounding-and-delegate-messaging/

于 2013-06-05T21:46:38.657 回答