gpt4 book ai didi

ios - 为什么从 WatchKit 扩展发送消息到 iOS 并返回回复这么慢?

转载 作者:搜寻专家 更新时间:2023-10-31 08:05:04 24 4
gpt4 key购买 nike

我正在使用 sendMessage 方法将消息从 WatchKit 扩展发送到 iOS 应用程序。收到回复平均需要大约 230 毫秒。该时间不取决于 iOS 应用程序是在屏幕上还是在后台运行。 230 毫秒大约是光绕地球一周并返回所需的时间。但是当我测试这个时,手机距离我的 watch 30 厘米。

问题:

  1. 为什么这么慢?
  2. 它应该这么慢吗?
  3. 有没有办法让它更快?

一个观察:根据我之前在 watchOS 1 中的实验,通信速度要快一些,一次往返大约需要 50 毫秒。

从 WatchKit 扩展发送消息

let session = WCSession.defaultSession()

session.sendMessage(["message from watch":"🌷"], replyHandler: { reply in
// Getting reply from iOS app here
}, errorHandler: nil)

从 iOS 应用接收消息

func session(session: WCSession, didReceiveMessage message: [String : AnyObject], replyHandler: ([String : AnyObject]) -> Void) {

replyHandler(["reply from iOS":"🐱"])
}

演示应用程序:https://github.com/evgenyneu/WatchKitParentAppBenchmark

iOS:9.0,watchOS:2.0

最佳答案

据我所知,当您向其他设备发送消息时,该消息将被存档到名为 WatchDirectory 的本地目录中的文件中。

此目录将通过蓝牙同步到其他设备,如其他 iCloud Drive App 或 Drop Box。因为这种方法不需要在传输完成时运行 iOS 和 watchOS App 的应用程序。

当新文件到达目录时,iOS(或 watchOS)将调用 WCSession 相关 API 来处理内容。如果需要,iOS(或 watchOS)会在发送消息之前在后台唤醒目标 App。

在 watchOS1 中,watch 扩展在 iOS 上运行,只有远程 UI 在 AppleWatch 上运行。所以它需要更简单的进程来通信,只是进程之间的通信。

sendMessage 是比 WCSession 提供的其他通信 API 更昂贵的方法。直到 watch 应用程序在前台运行,iOS 才能使用它,并且从 watchOS 使用 sendMessage 应该必须唤醒 iPhone 并在后台启动 iOS 应用程序。处理完分派(dispatch)的消息后,iOS 可能会终止在后台运行的目标应用程序以取回内存。

因此,IMO 没有理由认为它应该很快。

关于ios - 为什么从 WatchKit 扩展发送消息到 iOS 并返回回复这么慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32678545/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com