uniapp:APP开发,后台保活

2023-10-27

前言:

  1. 在ios中,软件切换至后台、手机息屏,过了十来秒软件就会被系统挂起,APP内的任务就不能继续执行;
  2. 在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 对讲机
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

uniapp:APP开发,后台保活 的相关文章

  • C++11与最小垃圾回收

    C 11新标准为了做到最小的垃圾回收支持 首先对 安全 的指针进行了定义 安全派生的指针是指向由new分配的对象或其子对象的指针 安全派生指针的操作包括 1 在解引用基础上的引用 比如 p 2 定义明确的指针操作 比如p 1 3 定义明确的
  • oracle的stored outline的创建与维护

    author skate time 2011 09 17 执行计划的稳定 如何确定哪些sql的执行计划不稳定 如何固定执行计划 执行计划直接影响app的性能 有的时候执行计划固定是很有用的 有很多因素影响执行计划的不稳定 像optimize

随机推荐

  • Evaluating Fuzz Testing

    1 介绍 信息量太大回头再写 一天后更新 不想写了差不多就下面这些内容吧 2 背景 2 1 fuzzing流程 fuzzing的核心算法 initSeedCorpus 初始化新的输入 isDone 决定fuzzing是否停止 choose
  • 一个程序来比较cuda/c在GPU/CPU的运行效率

    在网上看了一个比较GPU和CPU执行矩阵运算效率的帖子 亲自跑了一下 这是一个CUDA语言程序 请保存为 文件名 cu 我的主机配置如下 CPU G2030 内存8GB 显卡 GTX750ti 代码如下所示 include cuda run
  • Arduino for ESP8266&ESP32适用库ESPAsyncWebServer:WebSocket和EventSource

    文章目录 目的 WebSocket 使用方法 使用演示 更多说明 EventSource 使用方法 使用演示 更多说明 总结 目的 WebSocket和EventSource是HTML5开始提供的功能 WebSocket可以在单个TCP连接
  • oracle数据库-按多个字段排序

    应用场景 如果我们按多列排序且有升序和降序的时候的写法 排序时 有两个关键字 asc 表示升序 desc 表示降序 所以我们在order by 后面添加 asc desc select s bank code s account id s
  • MIME type备忘

    MIME type 是给文件管理器用的 包括桌面 也是文件管理器的一个展现形式 所以桌面的程序 有后缀名 就会自动变成某种图标 然后双击或者右键选打开方式就可以以某个定义好的程序打开 desktop文件可以包含MimeType applic
  • 学习一下 PDF417 条码

    PDF417条码 Portable Data File 便携式数据文件 是一种线性堆叠式的二维码 因为这个特性 在识读上 可以采用线性扫描的产品比如 激光扫描枪 CCD之类的条码阅读器读取 但实际操作效果不如影像式产品来的速度更快 PDF4
  • 【AI+医疗】AI在医疗影像设备工作周期中的应用探索

    导读 随着人工智能技术的飞速发展 越来越多的领域开始与人工智能技术深度融合 产生了一种新型的技术模式 AI AI 是指将人工智能技术与其他领域的技术或应用进行结合 在提高效率 精度和创新能力的同时 也为人工智能技术的发展提供了更多的应用场景
  • 基于LCD1602的躲闪类小游戏(使用STM32,平台Proteus,Keil,STM32cube)

    基于LCD1602的躲闪类小游戏 使用STM32 平台Proteus Keil STM32cube 这是我的 通信接口与技术 期末设计的一部分 花了一些时间终于做完啦 这个地方主要涉及到的是LCD1602的使用部分 B站游戏演示视频链接 演
  • Nexus搭建企业私有库

    需求背景 做私有库的工具有很多 如上一篇介绍的轻量级的npm包管理工具verdaccio 但刚好maven私服用的是nexus 所以最后选择了nexus来做npm的私服 和maven一套便于维护 nexus安装过程省略 创建 reposit
  • m.2接口和nvme区别_只看外表可不行,M.2接口也有大区别

    如今 硬盘早已告别了以往的大块头形象 如口香糖般大小的固态硬盘不仅让笔记本更轻更薄 还在速度上达到了新的高度 不过 这些固态硬盘虽然在外表上相差无几 但实际上还是有不少区别的 如果不注意这些区别而盲目购买硬件的话 那就很容易会产生无法使用的
  • 数据集(casia,msu,replay,oulu)的详细信息

    雷锅出品 1 casia 2 msu mfsd 3 replay 4 oulu 1 casia 总共有50个subject 其中30个作为test 20个作为train 每个subject总共有12个视频 故总共600个视频 其中3个为真
  • MySQL使用load data导入数据时报错: Cannot add or update a child row: a foreign key constraint fails

    目录 问题来源 解决办法 问题来源 初学MySQL 创建三个表department employee以及project 其中问题主要出现在employee表中 该表定义如下 CREATE TABLE employee id INT 10 P
  • Anaconda更换清华源、中科大源

    Anaconda是一个用于科学计算的Python发行版 支持Linux Mac Windows 包含了众多流行的科学计算 数据分析的Python 包 Anaconda安装好之后 默认的镜像是官方的 由于官网的镜像在境外 访问太慢或者不能访问
  • Mac下IDEA + Java EE Web + Tomcat环境配置

    本篇文章主要用于简要记录Mac下IDEA Java EE Web Tomcat的环境配置的流程 因为环境我已经事先配置好了 这里只演示流程 就不再重新安装了 下面我们开始吧 目录 IDEA Java EE Web Tomcat的环境配置 J
  • GPIO 有3种状态, 上拉,下拉,不拉

    GPIO 有3种状态 上拉 下拉 不拉 当GPIO处于output模式 一般选择no pull 引脚能够正确地输出输出高电平低电平信号 当GPIO处于input模式 需要根据默认的输入值来确定配置模式 如果默认输入的值为1时 最好配置为pu
  • 解决java.lang.NoClassDefFoundError错误

    本文目录 1 问题背景 2 NoClassDefFoundError错误发生的原因 3 NoClassDefFoundError和ClassNotFoundException区别 4 如何解决NoClassDefFoundError错误 5
  • 【免费】油管无字幕视频如何转录成文本

    啊哈 周末做了个好玩的 之前我做了个小工具 把 youtube 无字幕视频转录成音频 再提取文本 交给 ChatGPT 或者 http Claude ai 摘录出大纲 并组织成 markdown 文档 本来只自己用 因需要部署代码 现在我把
  • 【EI/SCOPUS征稿】第五届IEEE机器人与智能制造技术国际会议 (ISRIMT 2023)

    第五届IEEE机器人与智能制造技术国际会议 ISRIMT 2023 2023 5th International Symposium on Robotics Intelligent Manufacturing Technology 重要信息
  • 智能指针的原理、使用和实现

    1 智能指针的作用 C 程序设计中使用堆内存是非常频繁的操作 堆内存的申请和释放都由程序员自己管理 程序员自己管理堆内存可以提高了程序的效率 但是整体来说堆内存的管理是麻烦的 C 11中引入了智能指针的概念 方便管理堆内存 使用普通指针 容
  • uniapp:APP开发,后台保活

    前言 在ios中 软件切换至后台 手机息屏 过了十来秒软件就会被系统挂起 APP内的任务就不能继续执行 在android中 默认情况下 软件在后台运行的时候 触发某些特定条件的情况下 会被杀掉进程 解决方案 以下方案均测试息屏后台运行两小时