Spin worker threads and run CPU intensive tasks in the background. Bonus point on Android you can keep a worker alive even when a user quit the application :fireworks:
npm install react-native-workers --save
simply rnpm link react-native-workers
and you'r good to go.
Workers.xcodeproj
libWorkers.a
to Build Phases -> Link Binary With Libraries
in android/settings.gradle
include ':app', ':react-native-workers'
project(':react-native-workers').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-workers/android')
in android/app/build.gradle
add:
dependencies {
...
compile project(':react-native-workers')
}
and finally, in your MainApplication.java
add:
import co.apptailor.Worker.WorkerPackage; // <--- This!
public class MainApplication extends Application implements ReactApplication {
private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
@Override
protected boolean getUseDeveloperSupport() {
return BuildConfig.DEBUG;
}
@Override
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
new MainReactPackage(),
new WorkerPackage() // <--- and this
);
}
};
@Override
public ReactNativeHost getReactNativeHost() {
return mReactNativeHost;
}
}
Note: only the official react native modules are available from your workers (vibration, fetch, etc...). To include additional modules in your workers add them to the WorkerPackage constructor. Like this:
new WorkerPackage(new MyAwesomePackage(), new MyAmazingPackage())`
From your application:
import { Worker } from 'react-native-workers';
/* start worker */
const worker = new Worker("path/to/worker.js");
/* post message to worker. String only ! */
worker.postMessage("hello from application");
/* get message from worker. String only ! */
worker.onmessage = (message) => {
}
/* stop worker */
worker.terminate();
From your worker js file:
import { self } from 'react-native-workers';
/* get message from application. String only ! */
self.onmessage = (message) => {
}
/* post message to application. String only ! */
self.postMessage("hello from worker");
Reload
) the workers are killed