• react-native-background-job——让你的react-native项目实现后台运行


    安排在您的应用处于后台时运行JavaScript的后台任务。

    即使应用程序已关闭,任务也会运行,默认情况下,也会在重新启动后继续存在。

    这个库依赖于React Native的HeadlessJS ,目前只支持Android。

    在本机端,它使用Firebase JobDispatcherAlarmManager

    • 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
    • 手动安装

      1. 打开android/app/src/main/java/[...]/MainActivity.java
        添加import com.pilloxa.backgroundjob.BackgroundJobPackage;到文件顶部的导入
        new BackgroundJobPackage()添加到MainApplication.javagetPackages()方法返回的列表中

      2. 将以下行追加到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') 
      3. 在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)=>{});

    参考链接

  • 相关阅读:
    Python3中urllib使用介绍
    python urllib和urllib3包
    Python--urllib3库
    Python基础-变量作用域
    Python 面向对象三(转载)
    Python 面向对象二(转载)
    Python 面向对象一(转载)
    YAML 在Python中的应用
    Redis 命令二
    基于Redis的Bloomfilter去重(转载)
  • 原文地址:https://www.cnblogs.com/YooHoeh/p/9381415.html
Copyright © 2020-2023  润新知