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)=>{});

參考鏈接


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM