backgroundMode
Audio
的模式,可以一直在后台循环播放一个静音的音频,但是这种方案不清楚是否可以上架 1
kera0a 3 天前 via iPhone
番茄钟为啥要后台持续运行?
如果是计时可以用本地推送 |
2
Danmen123 OP @kera0a 因为不仅仅是番茄钟,还有其他不同类型的倒计时器,比如我的应用可以实现 100 个不同时间的倒计时同时运行,且必须在倒计时器结束的时候给用户发送通知,而且要求时间准确(因为有的会精确到毫秒),不能有任何延迟的。本地推送的话,貌似推送的时间不保证准确性吧?
|
4
fds 3 天前
……真有人需要 100 个倒计时么……
本地推送上限是 64 个吧,我觉得正常情况下够用了。 持续在后台跑着计时这种方案太浪费资源了,没必要。记录下结束时间,和本地时间对比一下显示出来就完事。精确到毫秒对于人类来说有些超纲。 |
5
hebwjb 3 天前
好奇什么样的需求要精确到毫秒,通知时间相差 100ms 用户能感知到差距吗
|
6
Danmen123 OP @hebwjb 其实应该是 10ms ,是有一个搞运动的要求的,我自己本身也觉的这种精度貌似没必要,但是有用户有这个需求,我就做了,如果 iOS 做不到的话,其实隐藏这个功能就好了
|
7
Danmen123 OP @fds 没办法,需要做各种个性化的提醒,所以必须在后台运行,比如每隔几秒中需要播放一个音频文件提醒一下这样的需求,如果仅仅是在计时器结束的时候发送一个通知的花,也没必要使用我们软件了,直接用手机系统自带的计时器更好用还节省资源呢
|
8
finab 3 天前
没有人需要 10ms 精度的提醒,CS 职业选手架枪的反应时间都 100-200ms 了。
就算你完全后台运行,给你 0 延迟弹提醒,手机弹出提醒框都 500ms 过去了。 建议梳理下真正的需求 |
9
finab 3 天前
另外眨眼都要 200ms ,闹麻了
|
11
Danmen123 OP @finab 我们软件的需求都是真实用户反馈的。不是我们自己在脑海里面冥思苦想的假需求。比如这个毫秒级别,其实无论是 10 毫秒还是 100 毫秒,这个都是真实存在的,尤其是我们的运动方面的用户,都反馈过这个需求。至于你说的眨眼 200 毫秒的问题,在给运动员测量每一次跑步或者每一次有用的时间,是允许测量的人眨眼的,且不会影响测量结果。
|
12
finab 3 天前 2
@Danmen123
你功能可以精确到毫秒,但是提醒是不需要精确到毫秒的 举个例子,现在假如你能在后台发送提醒,并且没有延迟。 你觉得发出的这个通知提醒,从 iPhone 亮屏(或从屏幕上面弹出),到用户眼睛看到,读取,再到大脑处理,过去了多少毫秒呢? 这个场景去扣 10ms 的精度有意义么 |
13
finab 3 天前
虽然我没测试过,但本地通知的触发定时用的是 TimeInterval ,本质是 Double, 传小数应该是支持毫秒。
不管有没有用吧,给你说一下 |
14
yjw06282 3 天前
非高刷屏
最常见刷新率 60ms 显示器刷新间隔就得 1000/60 = 16.6ms 你的 10ms 延迟已经突破物理极限了 |
16
sunshinez1128 3 天前 1
楼主直接刚客户就可以了,什么需求需要精确到 10ms,真有这个需求让客户直接用实时操作系统,现在的所有通用操作系统都不能保证 10ms 必须响应,也就是说通知想精确到 10ms 在操作系统层面无论是安卓还是苹果的内核调度系统都无法实现,直接硬刚客户,不同需求就不要提。
|
17
LitterL 3 天前
如果是回到后台,手机没有任何 UI 的显示,那可以在进入后台的时候生成一个时间戳,然后再进入前台的时候在生成时间戳,两者得到差值,更新 UI 显示
如果是回到后台,手机有 UI 的显示,比如有悬浮框,你可以用到 backgroundMode 的东西,RunLoop.main.add(timer, forMode: .common),进行操作 希望能够帮助到你 |
18
Danmen123 OP |
20
zhanglihow 3 天前
其实不是要用到后台计时,是用到闹钟,Android 上面用闹钟就可实现,iOS 同理
|
21
Building 3 天前
开启灵动岛实时活动就可以了,显示的时候 Text(startDate, style: .timer)
|
22
FaiChou 3 天前 via iPhone
昨天在推特上刷到了一个视频,他做了一个 demo 完全是你说的这个需求,切到后台再切回来时间不会被中断,找了下没有再找到这条推。
|
23
wyfig 3 天前 via iPhone
精确那么多没有必要。联网的话好解决,比如加个长链接,通过心跳发送服务器时间。在应用 resume 的时候通过长链接或者 http 请求当前时间,就可以计算出来期间过去多久了。
|