ios 7 Push Notification didReceiveRemoteNotification 方法在UI线程或单独线程上运行?
Posted
技术标签:
【中文标题】ios 7 Push Notification didReceiveRemoteNotification 方法在UI线程或单独线程上运行?【英文标题】:ios 7 Push Notification didReceiveRemoteNotification method run on UI thread or separate thread? 【发布时间】:2014-01-03 05:13:39 【问题描述】:(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))handler
方法在 UI 线程或单独的后台线程上运行?因为我需要根据推送消息处理数据并使用Core Data存储在本地数据库表中。如果我用这种方法做Core Data操作,会不会干扰UI?
【问题讨论】:
只是想我会添加一条评论,说他很容易用断点进行测试。在方法中设置断点并发送触发通知以查看它在哪个线程上执行。 【参考方案1】:每个应用程序委托方法仅在主线程上运行。尽量避免在那里做大任务。如果它的小任务不会干扰用户界面。
【讨论】:
我需要拆分一个字符串并将其存储为数组,然后使用核心数据将数组值存储到数据库中。如何在单独的线程中执行此操作? 我不熟悉核心数据,但你使用 Magical Record 来存储数据。也不需要单独的方法。【参考方案2】:application(_:didReceiveRemoteNotification:fetchCompletionHandler:) 是 UIKit 的一部分,它与 UI 线程相关联:
除非另有说明,否则只能从应用的主线程或主调度队列中使用 UIKit 类。此限制特别适用于从 UIResponder 派生的类或涉及以任何方式操纵应用程序用户界面的类。
UIKit 通过从 UI 线程调用此方法来遵循自己的规则。这使得使用其他 UIKey 方法变得容易,但您有责任确保您的方法快速返回。
【讨论】:
【参考方案3】:(void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo
fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))handler
方法在单独的后台线程上运行,因为当我们使用我们的应用程序时,应用程序会收到通知。所以这意味着这个方法在单独的后台线程上运行。
【讨论】:
以上是关于ios 7 Push Notification didReceiveRemoteNotification 方法在UI线程或单独线程上运行?的主要内容,如果未能解决你的问题,请参考以下文章
资料整理:基于node push server实现push notification
Flutter项目打包iOS出现 ITMS-90078 Missing Push Notification Entitlement问题
React Native Push Notification - react-native-fcm - ios无法构建