V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hunono
V2EX  ›  Apple

ios 这两种后台运行是怎么做到的?

  •  
  •   hunono · 2023-07-21 11:58:32 +08:00 · 3115 次点击
    这是一个创建于 485 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我不是开发者,只是普通用户,纯好奇。
    ios 后台运行一直是坑,听说是苹果对后台运行管的很严格。
    1 、崩坏星穹铁道这个游戏可以后台下载,当有 4 、5G 更新时,进入游戏开启下载后,切出游戏使用其他 app 时下载不会断开、暂停。以前玩过的所有的游戏更新都没法做到在后台下载,黑屏也不行,只能傻傻的让屏幕常亮,在下载界面呆 10 分钟。为什么以前的游戏做不到后台下载,星穹铁道难道和 apple 有 py 交易开放了这功能?
    2 、群晖的 Photo Mboile 怎么做到后台自动备份 ios 相册的,我一周没打开这 app ,这 app 确实帮我备份了相册,只是不是实时的,可能会延迟 1 天半天,在我的理解里只要不打开 ios 的 app ,备份相册这类“繁重”的工作 ios 做不到。
    14 条回复    2023-07-21 23:32:11 +08:00
    estk
        1
    estk  
       2023-07-21 12:08:11 +08:00
    Google Phones 如果没在后台都做不到备份相册
    i8086
        2
    i8086  
       2023-07-21 12:23:22 +08:00
    打开通知权限,可以在后台继续下载数据,王者荣耀和星穹铁道都可以,手机只有这两个游戏。

    打开通知权限,OneDrive 可以后台继续上传照片和视频。
    finab
        3
    finab  
       2023-07-21 12:28:06 +08:00
    网络下载本就是支持后台的,下载请求会被系统托管维持在后台
    备份相册可能是位置权限,这个权限打开位置更新时可以拉起 APP 运行代码
    HAYABUSA
        4
    HAYABUSA  
       2023-07-21 12:28:32 +08:00
    第 2 点,「在我的理解里只要不打开 ios 的 app ,备份相册这类“繁重”的工作 ios 做不到。」

    iOS 、maOS 等自带的相册就能在不打开 app 的情况下自动同步 iCloud ,且是可以做到实时同步的。
    eternityz
        5
    eternityz  
       2023-07-21 12:32:37 +08:00
    https://developer.apple.com/documentation/foundation/urlsession

    "Download tasks retrieve data in the form of a file, and support background downloads and uploads while the app isn’t running."
    6IbA2bj5ip3tK49j
        6
    6IbA2bj5ip3tK49j  
       2023-07-21 12:33:32 +08:00
    第一个:下载可以托管给系统
    第二个:基本都是用的地理位置更新
    mcluyu
        7
    mcluyu  
       2023-07-21 14:19:31 +08:00
    iOS APP 可以申请配置 10+种不同的后台模式, 比如蓝牙、静默推送、音频,AirPlay 、VoIP ,background fetch 等等, 只要愿意就可以实现后台下载。
    beimenjun
        8
    beimenjun  
       2023-07-21 15:21:25 +08:00   ❤️ 4
    iOS 应用开发者来说一下。

    1. 后台下载是有官方的方案的,但是相对来说是有额外工作量,不同 iOS 版本间还有点差异,太古早的可能还不好做。游戏很多时候这种功能优先级可能没那么高,或者支持的版本仅可能的老的时候也用不上这功能,所以你之前可能没遇到过支持后台下载的游戏。

    2. 群晖的 Photos Mobile 应该采用的是 BackgroundTasks ,向系统注册一个 task ,让系统决定运行时候(比如锁屏/充电之类用户不使用的时机)触发这个 task ,task 的内容就是后台备份任务,系统触发后,应用会执行对应的 task ,我估计群晖还做了一些判断是否处于 NAS 对应的内网之类的操作,然后再挂上一个几个小时间隔的 task ,下次系统有机会运行了,又会触发。
    okakuyang
        9
    okakuyang  
       2023-07-21 16:09:29 +08:00 via iPhone
    ios 有后台 app 提交一个任务让系统在合适时间运行。
    s7964926
        10
    s7964926  
       2023-07-21 16:45:01 +08:00
    这个帖子解决了很多疑惑,十分感谢。
    shawndev
        11
    shawndev  
       2023-07-21 18:35:10 +08:00
    8L 的答案已经比较准确了,更详细的资料。

    官方的相关文档 https://developer.apple.com/documentation/uikit/app_and_environment/scenes/preparing_your_ui_to_run_in_the_background/

    Xcode 提供的后台模式
    Audio,AirPlay, and Picture in Picture
    Location updates
    Voice over IP
    External accessory communication
    Uses Bluetooth LE accessories
    Acts as a Bluetooth LE accessory
    Background fetch
    Remote notifications
    Background processing
    Uses Nearby Interaction
    Push to Talk
    SenLief
        12
    SenLief  
       2023-07-21 21:22:37 +08:00 via iPhone
    简单来说就是有些后台是 ios 自己处理的,你只要告知 ios 我要求后台。
    ZRS
        13
    ZRS  
       2023-07-21 21:36:18 +08:00 via iPhone
    没做过 iOS 开发,但我观察 iOS 后台下载似乎是限速的
    yohole
        14
    yohole  
       2023-07-21 23:32:11 +08:00
    我在 ios 用的一个剪切板 APP ,目前使用体验中无法实时监控剪切板,哪怕 APP 打开之后,切换到其他 APP 一会就被杀后了,不知道这类需要实时监控的剪切板 APP 能否使用上述方案解决?

    如果目前 ios 有后台实时监控剪切板的 APP 也请大兄弟跟我说下,谢谢哈
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2878 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 14:34 · PVG 22:34 · LAX 06:34 · JFK 09:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.