前言:
- 在ios中,软件切换至后台、手机息屏,过了十来秒软件就会被系统挂起,APP内的任务就不能继续执行;
- 在android中,默认情况下,软件在后台运行的时候,触发某些特定条件的情况下,会被杀掉进程。
解决方案:
以下方案均测试息屏后台运行两小时
一、后台运行音频(无声音频)(一般)
manifest.json配置:APP常用其他设置—ios设置-后台运行能力,开启audio
代码:
// 开启后台音乐模式
import icon from '@/static/appIcons/20x20.png';
const playTimes = ref(0);
const createAudio = () => {
const bgAudioManager = uni.getBackgroundAudioManager();
bgAudioManager.title = '正在运行';
bgAudioManager.singer = '小熊管家';
bgAudioManager.coverImgUrl = icon;
bgAudioManager.src =
'https://******/keepAppLife.mp3';
let t: any = null;
const rePlay = () => {
if (t) {
return;
}
t = setTimeout(() => {
clearTimeout(t);
t = null;
bgAudioManager.play();
}, 30000);
};
bgAudioManager.onPlay(() => {
playTimes.value++;
});
bgAudioManager.onEnded(() => {
bgAudioManager.play();
});
bgAudioManager.onPause(() => {
rePlay();
});
bgAudioManager.onStop(() => {
rePlay();
});
bgAudioManager.onError(() => {
rePlay();
});
};
onShow(createAudio);
缺点:会被其他使用音频功能影响。
二、监听蓝牙断开触发push消息(依赖外部蓝牙)
适用于蓝牙保活业务类型。push消息可有可无。
manifest.json配置:APP常用其他设置—ios设置-后台运行能力,开启bluetooth-central,bluetooth-peripheral
采用监听蓝牙设备断连发送本地push消息,可有效提醒用户程序运行中,且不会中断程序
代码:
// 本地push消息,不能单纯使用push消息模式,
// 需要借助其他的ios后台运行能力,比如蓝牙监听连接状态
// 添加push可以有效的提醒用户打开APP,不使用则用户无感
const createPushMessage = () => {
uni.createPushMessage({
title: '小熊管家',
content: '正在运行',
payload: {
path: '/pages/bluetoothTest/bluetoothTest'
},
cover: true
});
};
// 监听广播蓝牙连接状态
const onBLEConnectionStateChange = (item: any) => {
uni.onBLEConnectionStateChange((res) => {
createPushMessage()
});
};
可以使用蓝牙扫描,APP后台运行时开启蓝牙扫描,切换前台时关闭,如此可以不依赖蓝牙
三、H5+ 实时监听经纬度变化(最优)
manifest.json配置:APP常用其他设置—ios设置-后台运行能力,开启location
代码:
const getIOSLocation = () => {
plus.geolocation.watchPosition(
function (res) {
console.log('监听位置变化信息:', res);
},
function (e) {
console.log('监听位置变化信息失败:' + e.message);
},
{ enableHighAccuracy: true, geocode: false }
);
};
onShow(getIOSLocation);
android端/鸿蒙端相关
一般情况下,安卓/鸿蒙手机会给每一个安装的APP软件设置耗电限制,默认是智能模式,在触发某些条件下,我们的APP就会被杀掉,只要不触发,存在时间还是很长的,那么如何修改?
手机类型 |
设置 |
华为 |
设置-应用管理-耗电详情-启动管理-选择允许后台活动 |
小米/红米 |
设置-应用管理-省电策略-选择无限制 |
vivo |
设置-电池-后台耗电管理-选择应用-选择允许后台高耗电 |
oppo |
设置-电池-关闭智能耗电保护-自定义耗电保护-选择应用-选择允许后台运行 |
ios手机使用开发中使用【后台运行能力】开启APP后台运行
其他手机类型参考类似设置
一般路人APP可能就不会这么去设置了
ios【后台运行能力】
名称 |
说明 |
audio |
后台运行音频,可触发ios后台运行不被杀进程 |
location |
后台运行定位,可触发ios后台运行不被杀进程 |
voip |
网络通话,需要创建VOIP推送证书 |
external-accessory |
一些外设控制 APP, 比如一些控制 第三方 MFI 配件的应用,声明这种 类型,可以让APP 在后台不断的与 外设进行沟通 |
bluetooth-central |
iPhone 作为蓝牙中心设备使用,也就是做为 server;需要在后台不断更新蓝牙状态的 |
bluetooth-peripheral |
iPhone 作为蓝牙外围设备使用,也就是做 client,需要在后台不断的访问其他蓝牙设备获取数据的 |
fetch |
APP 需要在后台不断地 频繁有规律的从网络获取数据,大多数APP的后台刷新都是使用此模式来完成,是不是可以使用WebSocket来触发? |
remote-notification |
远程消息推送 |
processing |
这是iOS13新增的一个模式,基于BackgroundTasks,优点在于不会检测cpu的占用率,也会启动应用的后台任务。 |
nearby-interaction |
iOS14苹果推出了NearbyInteraction 框架, 用于感知和连接具有U1芯片的设备。其主要目的是空间感知(近距离定位)。Nearby Interaction 主要提供了两种信息, 距离(Distance)和方位(Direction)。 当两个设备通过Nearby Interaction 互相连接时, 他们会不断发送距离和方位信息, 这样就能互相定位了。 并且同一个设备能够和周围的多个设备建立连接,互不干扰 |
network-authentication |
|
newsstand-content |
杂志应用,可以在后台下载杂志并处理 |
push-to-talk |
对讲机 |