Rapsssito / react-native-background-actions

React Native background service library for running background tasks forever in Android & iOS.
MIT License
817 stars 116 forks source link

BackgroundActions.stop does not terminate ongoing task #201

Open rakshitbharat opened 11 months ago

rakshitbharat commented 11 months ago

stop not working

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

Pavanbn03 commented 4 months ago

+1 I am also facing the same issue. Even after calling stop(), the service is not terminated.

Dwikavindra commented 2 months ago

Same here