Skip to content

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

Notifications You must be signed in to change notification settings

infuse-us/react-native-headless-work-manager

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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>

Param Type Description
params Object
params.workRequestType HeadlessWorkManager.ONE_TIME_WORK_REQUESTHeadlessWorkManager.PERIODIC_WORK_REQUEST
params.taskKey string The string used to register your task
[params.isUnique] boolean If true, any task with the same key will be replaced
[params.existingWorkPolicy] HeadlessWorkManager.KEEPHeadlessWorkManager.REPLACE If 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.timeout number Timeout for execution of your task
[params.interval] number Interval over which your task will be repeated, in given units
[params.timeUnit] HeadlessWorkManager.MILLISECONDSHeadlessWorkManager.SECONDSHeadlessWorkManager.MINUTESHeadlessWorkManager.HOURSHeadlessWorkManager.DAYS Units for your repeat interval
[params.data] Object Shallow object of data to be passed to your task

HeadlessWorkManager.getWorkInfoById(workerId) ⇒ Promise<WorkInfo>

Param Type Description
workerId string ID that was provided by the resolution of the promise returned by enqueue

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

Param Type Description
taskKey string The string used to register your task

HeadlessWorkManager.cancelWorkById(workerId) ⇒ Promise<null>

Param Type Description
workerId string ID that was provided by the resolution of the promise returned by enqueue

HeadlessWorkManager.cancelUniqueWork(taskName) ⇒ Promise<null>

Param Type
taskKey string

HeadlessWorkManager.cancelAllWork() ⇒ Promise<null>

Response Types

EnqueueResult : Object

Param Type
workerId string

WorkInfo : Object

Param Type
id string
state string
outputData Object
tags Array<string>

About

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

Resources

Stars

Watchers

Forks

Packages

No packages published