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.
$ npm install react-native-headless-work-manager --save
$ react-native link react-native-headless-work-manager
- 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 thegetPackages()
method
- 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')
- Insert the following lines inside the dependencies block in
android/app/build.gradle
:compile project(':react-native-headless-work-manager')
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);
}
}
}
- HeadlessWorkManager :
Object
- .enqueue(params) ⇒
Promise<EnqueueResult>
- .getWorkInfoById ⇒
Promise<WorkInfo>
- .getWorkInfosForUniqueWork ⇒
Promise<Array<WorkInfo>>
- .cancelWorkById(workerId) ⇒
Promise<null>
- .cancelUniqueWork(taskName) ⇒
Promise<null>
- .cancelAllWork() ⇒
Promise<null>
- .enqueue(params) ⇒
Param | Type | Description |
---|---|---|
params | Object |
|
params.workRequestType | HeadlessWorkManager.ONE_TIME_WORK_REQUEST ⎮ HeadlessWorkManager.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.KEEP ⎮ HeadlessWorkManager.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.MILLISECONDS ⎮ HeadlessWorkManager.SECONDS ⎮ HeadlessWorkManager.MINUTES ⎮ HeadlessWorkManager.HOURS ⎮ HeadlessWorkManager.DAYS |
Units for your repeat interval |
[params.data] | Object |
Shallow object of data to be passed to your task |
Param | Type | Description |
---|---|---|
workerId | string |
ID that was provided by the resolution of the promise returned by enqueue |
Param | Type | Description |
---|---|---|
taskKey | string |
The string used to register your task |
Param | Type | Description |
---|---|---|
workerId | string |
ID that was provided by the resolution of the promise returned by enqueue |
Param | Type |
---|---|
taskKey | string |
Param | Type |
---|---|
workerId | string |
Param | Type |
---|---|
id | string |
state | string |
outputData | Object |
tags | Array<string> |