react-native-background-job——让你的react-native项目实现后台运行
安排在您的应用处于后台时运行JavaScript的后台任务。
即使应用程序已关闭,任务也会运行,默认情况下,也会在重新启动后继续存在。
这个库依赖于React Native的HeadlessJS ,目前只支持Android。
在本机端,它使用Firebase JobDispatcher
或AlarmManager
。
Firebase JobDispatcher(默认值):无法准确计划任务,并且根据Android API版本允许不同的period段。 FirebaseJobDispatcher是最节省电池效率的后向兼容调度后台任务的方式。
AlarmManager通过将exact设置为true :简单的propriatery实现,仅在测试时使用。 它只关心按时执行,所有其他参数都被忽略 - 重启时不会保留任务。
要求
RN 0.36+
Android API 16+
支持的平台
仅Android
安装
- 下载
$ yarn add react-native-background-job
or
$ npm install react-native-background-job --save
- 自动安装
$ react-native link react-native-background-job
手动安装
打开
android/app/src/main/java/[...]/MainActivity.java
添加import com.pilloxa.backgroundjob.BackgroundJobPackage;
到文件顶部的导入
将new BackgroundJobPackage()
添加到MainApplication.java
的getPackages()
方法返回的列表中将以下行追加到
android/settings.gradle
:include ':react-native-background-job'
project(':react-native-background-job').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-background-job/android')在android/app/build.gradle的依赖项块中插入以下行,并将minSdkVersion置为21:
compile project(':react-native-background-job')
用法
每次React Native启动时都必须注册任务,这是使用register
函数完成的。 由于HeadlessJS
不安装任何组件,因此register
函数必须在任何类定义之外运行。
注册任务并不意味着任务已被调度,它只是通知React Native该job函数应该绑定到此jobKey
。 然后使用schedule功能安排任务。 默认情况下,当应用程序位于前台时,任务不会触发 。 这是因为任务是在唯一的JavaScript线程上运行的,如果在app处于前台时运行任务,它将冻结应用程序。 通过将allowExecutionInForeground
设置为true
您可以允许此行为。 建议您不要使用它,但快速工作应该没问题。
API
register
注册任务和应该运行的功能。
这必须在React Native的每次初始化时运行,并且必须在全局范围内运行,而不是在任何组件生命周期方法中运行。 查看示例项目。 仅注册任务不会安排任务。 它必须按schedule才能开始运行。
参数
obj 对象
obj.jobKey string任务的唯一键
obj.job 函数将运行的JS函数
例子
import BackgroundJob from 'react-native-background-job';
const backgroundJob = {
jobKey: "myJob",
job: () => console.log("Running in background")
};
BackgroundJob.register(backgroundJob);
schedule
安排一份新工作。
这只需要运行一次,而在每次初始化React Native时都必须运行register 。
参数
obj 对象
obj.jobKey string用于注册的任务的唯一键,用于在后续阶段取消。
obj.timeout number无论任务是否已完成,都应终止React实例的时间(以毫秒为单位)。 (可选,默认2000 )
obj.period number运行任务的频率(以ms为单位)。 这个数字不准确,Android可能会修改它以节省电池。 注意:对于Android> N,最小值为900 0000(15分钟)。 (可选,默认900000 )
obj.persist boolean如果任务应该在设备重启时保持obj.persist 。 (可选,默认为true )
obj.override boolean此任务是否应使用相同的键替换预先存在的任务。 (可选,默认为true )
obj.networkType number仅针对特定网络要求运行。 (可选,默认NETWORK_TYPE_NONE )
obj.requiresCharging boolean仅在设备正在充电时运行任务(未被Android N设备预备) docs (可选,默认为false )
obj.requiresDeviceIdle boolean仅在设备空闲时运行任务(未被Android N设备预备) docs (可选,默认为false )
obj.exact boolean安排在提供的时间段内准确触发的任务。 请注意,这不是节能的做事方式。 (可选,默认为false )
obj.allowWhileIdle boolean允许预定任务在打盹模式下执行。 (可选,默认为false )
obj.allowExecutionInForeground boolean即使应用程序位于前台,也允许执行预定任务。 仅用于短期任务。 (可选,默认为false )
例子
import BackgroundJob from 'react-native-background-job';
const backgroundJob = {
jobKey: "myJob",
job: () => console.log("Running in background")
};
BackgroundJob.register(backgroundJob);
var backgroundSchedule = {
jobKey: "myJob",
}
BackgroundJob.schedule(backgroundSchedule);
cancel
取消特定的工作
参数
obj 对象
obj.jobKey string作业的唯一键
例子
import BackgroundJob from 'react-native-background-job';
BackgroundJob.cancel({jobKey: 'myJob'});
cancelAll
取消所有预定作业
例子
import BackgroundJob from 'react-native-background-job';
BackgroundJob.setGlobalWarnings(false);
setGlobalWarnings
设置全局警告级别
参数
warn 布尔
例子
import BackgroundJob from 'react-native-background-job';
BackgroundJob.setGlobalWarnings(false);
isAppIgnoringBatteryOptimization
检查应用程序是否使用Doze优化电池,返回布尔值。
参数
callback从Android模块收到结果后,使用相应的参数callback 回调 。
例子
import BackgroundJob from 'react-native-background-job';
BackgroundJob.isAppIgnoringBatteryOptimisation((error,ignoringOptimization)=>{});
react-native-background-job——让你的react-native项目实现后台运行的更多相关文章
- 一、React Native 搭建开发环境(1)(Mac OS - IOS项目篇)
React Native是Facebook推出的一个开发IOS和安卓APP的技术.至于更多的详情,这里不再描述,大家可以自行百度它的定义. 原因:由于我想在一台电脑上同时开发IOS和Android两个 ...
- React Native v0.4 发布,用 React 编写移动应用
React Native v0.4 发布,自从 React Native 开源以来,包括超过 12.5k stars,1000 commits,500 issues,380 pull requests ...
- 移动端学习之理解WEB APP、Native APP、Hybrid APP以及React Native/uniapp包括H5、小程序等的区别与共通之处
因为工作需要,需要进一步了解移动端的开发,遂返回复习移动端的知识点,在开始学习之前,产生了疑惑WEB APP .Native APP .Hybrid APP.React Native.Uniapp.H ...
- React躬行记(16)——React源码分析
React可大致分为三部分:Core.Reconciler和Renderer,在阅读源码之前,首先需要搭建测试环境,为了方便起见,本文直接采用了网友搭建好的环境,React版本是16.8.6,与最新版 ...
- React.js入门笔记(续):用React的方式来思考
本文主要内容来自React官方文档中的"Thinking React"部分,总结算是又一篇笔记.主要介绍使用React开发组件的官方思路.代码内容经笔者改写为较熟悉的ES5语法. ...
- 五分钟学习React(三):纯HTML代码搭建React应用
上一期我们使用了React官方的脚手架运行React应用.大家可能会觉得这种方法很繁琐,需要配置各种第三方插件.JQuery时代的前端真是让人怀念.这一期,我就带领大家创建一个"怀旧版&qu ...
- react 入坑笔记(四) - React 事件绑定和传参
React 事件处理 建议:在了解 js 的 this 取值后食用更佳. 一.react 与 Html 中用法的异同和注意点 html 中的绑定事件的写法: <button onclick=&q ...
- React 源码剖析系列 - 不可思议的 react diff
简单点的重复利用已有的dom和其他REACT性能快的原理. key的作用和虚拟节点 目前,前端领域中 React 势头正盛,使用者众多却少有能够深入剖析内部实现机制和原理. 本系列文章希望通过剖析 ...
- React躬行记(5)——React和DOM
React实现了一套与浏览器无关的DOM系统,包括元素渲染.节点查询.事件处理等机制. 一.ReactDOM 自React v0.14开始,官方将与DOM相关的操作从React中剥离,组成单独的rea ...
- 【React】383- React Fiber:深入理解 React reconciliation 算法
作者:Maxim Koretskyi 译文:Leiy https://indepth.dev/inside-fiber-in-depth-overview-of-the-new-reconciliat ...
随机推荐
- Linux网络编程目录
基本TCP套接字编程 1. 套接字API 简单的回射服务器 TCP:IO多路复用 1. 函数select.poll 2.函数epoll
- [转] Webpack-CommonsChunkPlugin
当前项目结构 项目结构 其中 Greeter.js 引用了 config.json main.js 和 second.js 都引用了 Greeter.js main.js 还引用了 onlyfor ...
- windows下面使用nssm设置新的服务实现开机自启等
1.下载: http://nssm.cc/download/?page=download 2.解压: 根据自己的系统选择相应的32bit或者64bit,然后将相应的可执行文件拷贝到系统环境中.配置环境 ...
- github的pull request是指什么意思
有一个仓库,叫Repo A.你如果要往里贡献代码,首先要Fork这个Repo,于是在你的Github账号下有了一个Repo A2,.然后你在这个A2下工作,Commit,push等.然后你希望原始仓库 ...
- 分布式配置hadoop2.5.0 2.6.x
1. sudo vim /etc/hostname 在master的机器上,改成 master 在slave上写 slave01,02,03...... 配置好后重启. 2. sudo vi ...
- BZOJ1096 [ZJOI2007]仓库建设 动态规划 斜率优化
原文链接http://www.cnblogs.com/zhouzhendong/p/8696410.html 题目传送门 - BZOJ1096 题意 给定两个序列$a,b,X$,现在划分$a$序列. ...
- LeetCode竞赛题:K 次取反后最大化的数组和(给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。)
给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次.(我们可以多次选择同一个索引 i.) 以这种方式修改数组后 ...
- Python操纵Excel,数据库
操作excelxlwt:写入excel表格 ,用这个之前需要先导入模块 xlwt: import xlwtxlrd:读取excel,用这个之前需要先导入模块 xlwt:import xlrd 注意:e ...
- 使用 PySide2 开发 Maya 插件系列一:QT Designer 设计GUI, pyside-uic 把 .ui 文件转为 .py 文件
使用 PySide2 开发 Maya 插件系列一:QT Designer 设计GUI, pyside-uic 把 .ui 文件转为 .py 文件 前期准备: 安装 python:https://www ...
- MYSQL总览
第一,二,三范式解决的是非主属性的关系.BC 范式解决的是主属性的关系:第二范式:就是完全依赖,没有部分依赖([id,b]->c 即不能c即依赖id又依赖b):[非主属性不能依赖于主键的一部分, ...