当前位置:首页 > 每日看点

是如何做到长时间在iOS后台运行的?

卡卷网1年前 (2025-01-06)每日看点257

iOS开发者

2023年12月了,这个后台循环播放无声音频保活的策略还是没有移除掉。

用了11分钟,睡一觉消耗我54%的电。iPhone15Pro。

只能卸载了。

<>2023年12月18更新

恰好这两天要搞后台下载,再加上这个事,我特地查苹果文档找了相关资料来确定我的经验带给我的认知没有出错。

目前后台运行的方式

<>1,配置后台下载

//配置后台下载session的config NSLSessionConfigation*config=[NSLSessionConfigationackgroundSessionConfigationWithIdentifier:@"sessionId"]; //下载完如果app被了调用launch config.sessionSendsLaunchEvents=YES; //后台下载的优先级等托管给。传输大数据要设置yes以保证稳定性 config.discretionary=YES;

实际上这种是将下载托管给,下载动作不在app进程内,如果app被挂起、死(非用户主动上滑任务卡片)、崩溃也不会影响,下载完成之后会主动唤醒app。

<>但是这个场景太过单一,只能用于下载,无法在里面加上业务逻辑。目前我遇到的用这种方式后台运行的只有王者荣耀、迅雷下载。

<>2,remoteNotifycatio和nActivityKit,即远程推送和灵动岛。

这俩都由服务端向苹果发送数据,再由苹果推送向设备,可以唤醒程序执行少量代码。

以最新的灵动岛举例

灵动岛具有“Start”、“Update”、“End”三种状态。其中更新和结束可以由后台远程推送更新唤起,简而言之,这种状态下哪怕app是不活动的状态也能唤起运行。

apns-topic:固定为{undleId}.push-type.liveactivity apns-push-type:固定为liveactivity SimulatorTargetundle:模拟器推送,设置为对应应用的{undleId} timestamp:刷新时间戳。需设置正确,否则灵动岛的推送不会生效 event:可填入update、end,对应灵动岛的更新与结束。 content-state:对应灵动岛的Attriutes

<>很明显这种方式只能做简短的代码逻辑,每次被唤醒之后10S之内会再次被挂起。不可能让服务端频繁推送更新来实现保活的。

<>3,音乐、健身、定位、通话类应用或具备此功能的应用。

<>根据设置里面展示的“后台活动,音频”,可以得出主要是播放无声音频来保证app不被死,音频播放几个重要回调(音频播放生命周期)里面能做的事情太多了。基本上就是起了一个repeat的定时器,定时器多久执行一次取决于音频时长。如我播放1秒的音频,那就是个1秒钟的重复运行定时器。可作性特别强,如我想在音频开始播放时new一个AudioRecorder什么的记录麦克风那太可行了。

所以...

已卸载闲鱼,支付宝已注销账号。由于最后一笔订单没有超过15天,没有注销账号成功。

2012年1月12注册的。累计消费44万。拜拜了。

------

2023-12-26更新

教大家一个简单的识别App是否有后台播放音频的逻辑。

1,打开音乐播放App,网易云或者Applemusic之类的播放音乐。

2,进入某App,如果这个App界面没有显示播放音乐你的音乐播放器停了,那有概率是App后台播放音乐。还有可能是播放音乐/直播等占用audioSession了你没看到。

3,某个App前台进后台你的音乐停了,那绝对是后台播放音频了。

------

2024-06-24更新

<>有人评论说是后台定位导致的保活。我在这里分析一下。

首先参照第3条【音乐、健身、定位、通话类应用或具备此功能的应用】,我不清楚有没有申请后台定位权限,即

CLLocationManager.requestAlwaysAuthorization

1,申请后台定位权限的app,会弹出一个“后台使用期间”的弹窗让用户选择,我的里面只有高德允许后台定位。

2,虽然申请了这个权限可以在用户定位发声明显变化时或者进入/离开“app所设置的地理围栏”时触发,但是并不会太频繁的作为soce1事件输入给app。

结合以上2点所以这个可能也pass。

然后他提到cpu占用异常会被看门狗死应用,我只能说,外行太想当然。iOS开发者耳熟能详的0xadf00dcrash,也就是watchdog超时,这种崩溃是指主线程占用异常,看门狗机制非常宽容,只有主线程被完全阻塞的情况下才会crash。以苹果A17的6核心举例,哪怕599%的cpu占用率,只要主线程还能响应,它都不会给你了。而且如果是我来写这个后台保活代码,我又不用刷新UI(反正后台执行逻辑用户也看不到),我都不用在主线程,直接随便new一个子线程队列去塞任务。

另外说一下,快捷指令里面的基于定位触发的自动化就是基于地理围栏,但是大家可能发现触发不准,原因是设置地理围栏的时候的定位坐标系是gcj02也就是国家02年标准,但是实际触发的逻辑里面是层面的s82也就是全球定位82年标准坐标系(苹果一直没有修复这个问题)。所以大家如果想触发准的话,在选择地点的时候要看看想触发的位置的定位在s82里面是哪里,然后选那个地方即可。

<>最近有人私信我问锁屏界面的广告播放器是什么情况...

我只能说国内产品经理没下限,利用灵动岛和远程推送,让主动唤醒用户设备,然后new一个广告播放器,触发播放广告的逻辑,的是玩的花啊。。。

第一种:iOS16以后的灵动岛设备的实时活动广告---设置---app---实时活动---关闭

第二种:不是灵动岛,但是锁屏/非锁屏情况下莫名其妙跑出一个播放器开始播放广告---设置---app---通知---关闭

扫描二维码推送至手机访问。

版权声明:本文由卡卷网发布,如需转载请注明出处。

本文链接:https://www.kajuan.net/ttnews/2025/01/6591.html

分享给朋友:

相关文章

为什么程序员不自己开发微信小程序这类似的东西赚钱?

为什么程序员不自己开发微信小程序这类似的东西赚钱?

你如果有好的想法是可以挣钱的 首先大家说的个人资质限制确实多,也不建议直接拿个人资质去用小程序盈利,因为很麻烦 我说一下我的大体操作: 1.首先去申请个体户,这个可以用住宅来注册申请,而且速度很快就几天就下来了,经营类目主要是互联网销售这些…

抖音和快手最大的区别是什么?

1、目标人群定位不同抖音:一二线城市,占比52%,大专学历以上,女性偏多。抖音以年轻群体居多。 快手:三四线城市,占比64%,高中学历以下,男女更均衡。快手所覆盖的年龄段范围更广。 2、内容创作的形式和深度不同抖音:偏深层,内容的装饰及表达…

在 Istio、Linkerd 和 Cilium 之间,哪种服务网格在性能上表现最佳?

在 Istio、Linkerd 和 Cilium 之间,哪种服务网格在性能上表现最佳?

在讨论服务网格之前,先理解一下为什么我们需要它。现代微服务架构意味着将应用拆分为多个小型、独立的服务,这些服务可以独立开发、部署和扩展。然而,服务之间的通信和管理成了巨大的挑战,例如如何保证安全的通信、负载均衡、监控与可观测性等。服务网格…

为什么有人觉得华为mate60只值2000?

为什么有人觉得华为mate60只值2000?

你以为买Mate60的人真的傻?真的那么爱国? 国庆前,我家那傻子加价800多买了一台Mate60,当时还被我骂他是傻子。 可是他说一回到公司就被老板同事朋友看到,拿去反复查看,都在惊叹他这么快就买到新机。 跟亲戚朋友聚会,别人一看就知道他…

鸿蒙到底是不是安卓套壳?

鸿蒙到底是不是安卓套壳?

把它是不是套壳先放在一边吧。我讲一个事情,大家自己判断。 华为有一个应用,叫手机管家。这个手机管家对一些 系统底层设置有影响:比如华为从 EMUI 9 开始不允许将第三方启动器设置为默认启动器,依靠的就是这个手机管家。为什么这么说呢?在网上…

怎样拥有一台最便宜的服务器?

怎样拥有一台最便宜的服务器?

内容提示:主打一个 DIY + 极限白嫖 =) 某宝花10块买一个“随身WiFi”,刷入Ubuntu,用SSH远程连接,但是记得一定要把外壳撬掉然后粘个散热器(哪怕是白萝卜也彳亍),否则会过热 详细去酷安社区搜“随身WiFi” ======…

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。