import BackgroundActions from 'react-native-background-actions';
import { DeviceEventEmitter } from 'react-native';
/**
* Class BackgroundTaskManager is designed to manage background tasks using
* react-native-background-actions. However, the task started by scheduleTask
* does not stop when finish is called.
*/
class BackgroundTaskManager {
static instance = null;
static iteration = 0;
static backgroundTaskId = null;
constructor() {
if (!BackgroundTaskManager.instance) {
BackgroundTaskManager.instance = this;
BackgroundTaskManager.resetInit();
console.log('BackgroundTaskManager initialized');
}
return BackgroundTaskManager.instance;
}
/**
* Resets the task manager and clears any existing background task configuration.
*/
static resetInit() {
this.configArgsiOS = null;
this.configStartFunction = null;
this.configTimeoutFunction = null;
this.task = null;
this.options = null;
this.iteration++;
console.log('BackgroundTaskManager reset');
}
/**
* Configures the task manager with provided arguments.
*/
static async configure(...args) {
BackgroundTaskManager.resetInit();
console.log('Configuring with args:', args);
this.configArgsiOS = args;
if (this.configStartFunction === null) {
this.configStartFunction = args[1];
}
this.configTimeoutFunction = args[2];
console.log('Configuration is now unified for both platforms.');
}
/**
* Schedules a new background task. The task does not stop as expected when
* the finish method is called.
*/
static async scheduleTask(...args) {
const { taskId } = args[0];
console.log('Scheduling task with args:', args);
// Task scheduling options
this.options = {
// ... existing options
};
// Task logic
const veryIntensiveTask = async taskDataArguments => {
// ... existing task logic
};
console.log(`Background task ${taskId} scheduled`);
if (this.configStartFunction) {
BackgroundActions.start(veryIntensiveTask, this.options);
}
}
/**
* Attempts to stop the background task. However, this does not
* seem to stop the ongoing task.
*/
static async finish() {
BackgroundActions.stop();
BackgroundTaskManager.resetInit();
console.log(`Stopping background task`);
DeviceEventEmitter.emit('stopBackgroundTask');
}
static delay = ms => new Promise(resolve => setTimeout(resolve, ms));
}
export default BackgroundTaskManager;
tried all ways but my internal hidden logic when i cann BackgroundActions.stop does not terminate ongoing task
stop not working
tried all ways but my internal hidden logic when i cann BackgroundActions.stop does not terminate ongoing task