Execute JS code in React Native's context even when RN is inactive (eg. app in background).
In Android, where background services are indispensable, keeping RN in sync can be hard since RN doesn't stay active in background. Currently, Android-only.
A tiny library which registers a JavascriptModule
in RN's JavascriptModuleRegistry
and makes Catalyst
(Bridge) run it.
Before using this, please note that HeadlessJS is another good way to go.
$ npm install react-native-context-execute --save
$ rnpm link react-native-context-execute
- Open up
android/app/src/main/java/[...]/MainActivity.java
- Add
import com.reactlibrary.RNContextExecutePackage;
to the imports at the top of the file - Add
new RNContextExecutePackage()
to the list returned by thegetPackages()
method
- Append the following lines to
android/settings.gradle
:include ':react-native-context-execute' project(':react-native-context-execute').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-context-execute/android')
- Insert the following lines inside the dependencies block in
android/app/build.gradle
:compile project(':react-native-context-execute')
In your Java side, grab hold of the ReactApplicationContext
and do,
WritableMap payload = Arguments.createMap();
payload.putString("some_key", "some_value");
new ReactContextExecutor(reactApplicationContext).execute("some_other_key", payload);
In JS side,
import { ContextExecute } from 'react-native-context-execute';
ContextExecute((op, data) => {
// Do your thing
});