codecamp

快应用 后台运行

为了节省系统资源,通常情况下,快应用切换到后台后将会暂停运行,等到再次切换回前台时继续运行。但音乐\运动等类型的应用, 退到后台后可能仍然需要继续运行,为满足此类需求,加入了对后台运行的支持。后台运行模式的工作原理如下:

在快应用切换到后台时,系统将会检查是否满足后台运行的条件,如果满足,快应用将继续运行,否则将被暂停。此条件包括:

  1.  manifest.json 中声明了后台运行接口 
  2. 快应用调用 Resident 接口启动了后台运行模式 
  3. 当前至少有一个(已在 manifest.json 中声明的)后台运行接口正在运行

处于后台运行中的应用,如果所有后台运行接口均运行结束,系统将会启动 20s 倒计时。倒计时结束后,如果仍未有后台运行接口被调用, 快应用将会退出后台运行模式,暂停运行。

快应用进入后台运行模式后,系统将会在通知栏上显示一个通知,以提示用户此快应用正在后台运行。快应用可以定制通知上的描述文案, 以告知用户后台工作的状态。通知上有结束按钮,用户可以强制快应用退出后台运行模式。

实践建议:

  • 后台运行需要消耗较多的系统资源,快应用需要根据自身需求审慎使用。针对申请后台运行的快应用,上线审核时将会审核其后台运行的需求是否合理。
  • 后台运行接口的导入和后台执行的工作放到 app.ux 中,而不是放到页面中,以免避免页面切换和销毁的影响。
  • 尽量提供定制的通知栏描述文案,并且文案应准确描述后台工作的内容及其状态(比如网盘应用可以显示:“备份进度 30%”),以免用户反感。

配置方法

manifest.json 中声明所需的后台运行接口。后台运行接口包括:

  • 音频播放:system.audio
  • 录音:system.record
  • 上传下载:system.request
  • 地理位置:system.geolocation

{
  "package": "com.hybrid.demo.sample",
   ......

  "config": {
    "logLevel": "trace",
    "background": {
      "features":[
        "system.audio",
        "system.record",
        "system.request",
        "system.geolocation"
      ]
     }
   ......
}

Resident接口使用

详细用法参见 Resident 脚本

接口分类

后台运行状态下,各接口根据限制级别的不同被分为三大类:需申请访问、可直接访问、禁止访问(每个接口的文档上均附有本接口的限制级别)。

  1. 需申请访问的接口
    此部分接口需要在 manifest.json 的 background 中声明后才能在后台运行状态中使用,并且只有在调用了如下几个接口中的方法时,快应用才可以进入后台运行状态。 例如:音频(system.audio), 录音(system.record),上传下载(system.request),地理位置( system.geolocation )等。
  2. 可直接访问的接口
    此部分接口可以在后台运行状态下直接使用。 例如:应用上下文( system.app ),日志打印( console ),通知消息( system.notification ),数据请求( system.fetch )等。
  3. 禁止访问的接口
    在后台运行状态下,如下接口禁止访问(如果访问将返回804错误)。 例如:页面路由( system.router ),分享( system.share ),弹窗( system.prompt ),打开网页( system.webview )等

通知提示

如果使用 Audio 接口并且在通知栏显示了音频播放状态,将不会再显示后台运行通知;

如果只使用除 Audio 外的其它后台运行接口,快应用进入后台状态后,通知栏会显示如下提示(描述信息可通过 resident 中 startResident 接口进行修改,默认不显示):

img_1


快应用 hap链接
快应用 sitemap
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

快应用 参考手册

快应用 安全

快应用 声音音频

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }