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 ...
随机推荐
- exception: java.net.ConnectException: Connection refused; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused
1.虽然,不是大错,还说要贴一下,由于我运行run-example streaming.NetworkWordCount localhost 9999的测试案例,出现的错误,第一感觉就是Spark没有 ...
- Java 集合Collection与List的详解
1.什么是集合 存储对象的容器,面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,存储对象,集合是存储对象最常用的一种方式. 集合的出现就是为了持有对象.集合中可以存储任意类型的 ...
- tjoi2018
1.[TJOI2018]数学计算 傻逼题 会发现符合线段树分治的特点 每个数的操作范围都是连续的 然后就等于区间修改了 #include <bits/stdc++.h> using nam ...
- [ZJOI2006]皇帝的烦恼
题解: 具有单调性的题目还是要多想想二分答案 不二分答案暴力dp是n^3的 非常不优秀 二分答案之后就比较好做 mx[i],nx[i]表示最多/最少几个与a[1]相同 代码: #include < ...
- URL地址编码和解码
0. 参考 [整理]关于http(GET或POST)请求中的url地址的编码(encode)和解码(decode) python3中的urlopen对于中文url是如何处理的? 中文URL的编码问题 ...
- Python_collections_OrderedDict有序字典部分功能介绍
OrderedDict():实现字典的固定排序,是字典的子类 import collections dic = collections.OrderedDict() dic['k1'] = 3 dic[ ...
- ghithub中PHPOffice/PHPWord的学习
1.概念:PHPWord是用纯PHP提供了一组类写入和从不同的文档格式的文件阅读库.PHPWord的当前版本支持微软的Office Open XML(OOXML或处理OpenXML),用于Office ...
- Java基础总结01:JDK与JRE概述
1)JRE(Java Runtime Environment,Java运行时环境) 包括Java虚拟机(JVM Java Virtual Machine)和Java程序所需的核心类库等,如果想要运行一 ...
- 随GCTY
1.用常数1来取代运行时间中所有加法常数. 2.修改后的运行次数函数中,只保留最高阶项 3.如果最高阶项存在且不是1,则去除与这个项相乘的常数. 如果sum = (1+n)*n/2这条语句再执行10遍 ...
- window.location.replace和window.location.href区别
有3个页面 a,b,c 如果当前页面是c页面,并且c页面是这样跳转过来的:a->b->c 1:b->c 是通过window.location.replace("..xx/c ...