1.0.1 • Published 4 years ago

react-native-headless-work-manager v1.0.1

Weekly downloads
1
License
MIT
Repository
github
Last release
4 years ago

react-native-headless-work-manager

Enables the use of Android's WorkManger to schedule execution of HeadlessJS tasks.

Once this native module is installed, both the scheduling and definition of tasks can be done entirely in JavaScript.

Getting started

$ npm install react-native-headless-work-manager --save

Mostly automatic installation

$ react-native link react-native-headless-work-manager

Manual installation

Android

  1. Open up android/app/src/main/java/[...]/MainApplication.java
  • Add import com.reactlibrary.WorkManagerPackage; to the imports at the top of the file
  • Add new WorkManagerPackage() to the list returned by the getPackages() method
  1. Append the following lines to android/settings.gradle:
    include ':react-native-headless-work-manager'
    project(':react-native-headless-work-manager').projectDir = new File(rootProject.projectDir, 	'../node_modules/react-native-headless-work-manager/android')
  2. Insert the following lines inside the dependencies block in android/app/build.gradle:
      compile project(':react-native-headless-work-manager')

Usage

To your AndroidManifest.xml, add:

<manifest ...>
	<application ...>
		...
		<service android:name="com.infuse.headlessworkmanager.HeadlessService" />
	</application>
</manifest>

index.js

import { AppRegistry } from 'react-native';

AppRegistry.registerHeadlessTask('YourHeadlessTask', () => async data => console.log(data));

App.js (or wherever you like)

import React, { Component } from 'react';
import HeadlessWorkManager from 'react-native-headless-work-manager';

export default class App extends Component {
	async componentDidMount() {
		try {
			const { workerId } = await HeadlessWorkManager.enqueue({
				workRequestType: HeadlessWorkManager.PERIODIC_WORK_REQUEST,
				taskKey: 'YourHeadlessTask',
				isUnique: true,
				existingWorkPolicy: HeadlessWorkManager.REPLACE,
				timeout: 1000,
				interval: 15,
				timeUnit: HeadlessWorkManager.MINUTES,
				data: {
					foo: 'bar',
				},
			});

			const workInfo = await HeadlessWorkManager.getWorkInfosForUniqueWork('YourHeadlessTask');
		} catch(err) {
			console.error(err);
		}
	}
}

API

HeadlessWorkManager : Object

  • HeadlessWorkManager : Object .enqueue(params) ⇒ Promise<EnqueueResult> .getWorkInfoById ⇒ Promise<WorkInfo> .getWorkInfosForUniqueWork ⇒ Promise<Array<WorkInfo>> .cancelWorkById(workerId) ⇒ Promise<null> .cancelUniqueWork(taskName) ⇒ Promise<null> .cancelAllWork() ⇒ Promise<null>

HeadlessWorkManager.enqueue(params) ⇒ Promise<EnqueueResult>

ParamTypeDescription
paramsObject
params.workRequestTypeHeadlessWorkManager.ONE_TIME_WORK_REQUESTHeadlessWorkManager.PERIODIC_WORK_REQUEST
params.taskKeystringThe string used to register your task
params.isUniquebooleanIf true, any task with the same key will be replaced
params.existingWorkPolicyHeadlessWorkManager.KEEPHeadlessWorkManager.REPLACEIf work is unique and policy is keep, new work will not start. If work is unique and policy is replace, new work will replace existing.
params.timeoutnumberTimeout for execution of your task
params.intervalnumberInterval over which your task will be repeated, in given units
params.timeUnitHeadlessWorkManager.MILLISECONDSHeadlessWorkManager.SECONDSHeadlessWorkManager.MINUTESHeadlessWorkManager.HOURSHeadlessWorkManager.DAYSUnits for your repeat interval
params.dataObjectShallow object of data to be passed to your task

HeadlessWorkManager.getWorkInfoById(workerId) ⇒ Promise<WorkInfo>

ParamTypeDescription
workerIdstringID that was provided by the resolution of the promise returned by enqueue

HeadlessWorkManager.getWorkInfosForUniqueWork(taskKey) ⇒ Promise<Array<WorkInfo>>

ParamTypeDescription
taskKeystringThe string used to register your task

HeadlessWorkManager.cancelWorkById(workerId) ⇒ Promise<null>

ParamTypeDescription
workerIdstringID that was provided by the resolution of the promise returned by enqueue

HeadlessWorkManager.cancelUniqueWork(taskName) ⇒ Promise<null>

ParamType
taskKeystringThe string used to register your task

HeadlessWorkManager.cancelAllWork() ⇒ Promise<null>

Response Types

EnqueueResult : Object

ParamType
workerIdstring

WorkInfo : Object

ParamType
idstring
statestring
outputDataObject
tagsArray<string>