Skip to content

registerOneOffTask doesn't trigger when app is in foreground on Adnroid/iOS #620

@kamilkarp

Description

@kamilkarp

Documentation says this:
Workmanager.registerOneOffTask was previously using iOS BGProcessingTask, now it will be an immediate run task which will continue in the background if user leaves the App. Since the previous solution meant the one off task will only run if the device is idle and as often experienced only when device is charging, in practice it means somewhere at night, or not at all during that day, because BGProcessingTask is meant for long running tasks. The new solution makes it more in line with Android except it does not support initialDelay

When I call registerOneOffTask when the app is in foreground the task doesn't trigger. When triggered during app is in inactive state, task runs without any issues. Same happening on Android/iOS. I'm I doing something wrong or something like this is actually not supported?

Flutter version: 3.27.4
Plugin version: 0.7.0

@pragma('vm:entry-point')
void callbackDispatcher() {
  Workmanager().executeTask((task, inputData) async {
    final getIt = GetIt.instance;
    await configureDependencies(getIt);

    /// .........

    await sessionsHandler.handle(inputData: inputData);

    return Future.value(true);
  });
}

main:

 await Workmanager().initialize(
    callbackDispatcher,
    isInDebugMode: kDebugMode,
  );

call:

    Workmanager().registerOneOffTask(
      'sessions-update-task',
      'sessionsUpdate',
      inputData: {
        'activitiesToAddSessionId': activitiesToAddSessionId,
        'activitiesToAddJson': jsonEncode(activitiesToAdd),
        'workPolicy': workPolicy.name,
      },
      existingWorkPolicy: workPolicy,
      outOfQuotaPolicy: OutOfQuotaPolicy.runAsNonExpeditedWorkRequest,
      constraints: Constraints(
        networkType: NetworkType.connected,
        requiresBatteryNotLow: false,
        requiresCharging: false,
        requiresStorageNotLow: false,
        requiresDeviceIdle: false,
      ),
    )

Info.plist

	<key>BGTaskSchedulerPermittedIdentifiers</key>
	<array>
		<string>sessions-update-task</string>
	</array>
	<key>UIBackgroundModes</key>
	<array>
		<string>fetch</string>
		<string>remote-notification</string>
	</array>

AppDelegate:

    GeneratedPluginRegistrant.register(with: self)
    WorkmanagerPlugin.setPluginRegistrantCallback { registry in
      GeneratedPluginRegistrant.register(with: registry)
    }

    // commenting/uncommenting - same result
    // WorkmanagerPlugin.registerTask(withIdentifier: "sessions-update-task")

I've tried upgrading flutter to 3.32.7 and plugin to 0.8.0, but now if I call registerOneOffTask in foreground I'm getting this:

E/MethodChannel#dev.fluttercommunity.workmanager/foreground_channel_work_manager(15175): Failed to handle method call
E/MethodChannel#dev.fluttercommunity.workmanager/foreground_channel_work_manager(15175): java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Class java.lang.Object.getClass()' on a null object reference
E/MethodChannel#dev.fluttercommunity.workmanager/foreground_channel_work_manager(15175): 	at dev.fluttercommunity.workmanager.WM.buildTaskInputData(WorkmanagerCallHandler.kt:348)
E/MethodChannel#dev.fluttercommunity.workmanager/foreground_channel_work_manager(15175): 	at dev.fluttercommunity.workmanager.WM.enqueueOneOffTask(WorkmanagerCallHandler.kt:247)
E/MethodChannel#dev.fluttercommunity.workmanager/foreground_channel_work_manager(15175): 	at dev.fluttercommunity.workmanager.RegisterTaskHandler.enqueueOneOffTask(WorkmanagerCallHandler.kt:153)
E/MethodChannel#dev.fluttercommunity.workmanager/foreground_channel_work_manager(15175): 	at dev.fluttercommunity.workmanager.RegisterTaskHandler.handle(WorkmanagerCallHandler.kt:118)
E/MethodChannel#dev.fluttercommunity.workmanager/foreground_channel_work_manager(15175): 	at dev.fluttercommunity.workmanager.WorkmanagerCallHandler.onMethodCall(WorkmanagerCallHandler.kt:47)
E/MethodChannel#dev.fluttercommunity.workmanager/foreground_channel_work_manager(15175): 	at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:267)
E/MethodChannel#dev.fluttercommunity.workmanager/foreground_channel_work_manager(15175): 	at io.flutter.embedding.engine.dart.DartMessenger.invokeHandler(DartMessenger.java:292)
E/MethodChannel#dev.fluttercommunity.workmanager/foreground_channel_work_manager(15175): 	at io.flutter.embedding.engine.dart.DartMessenger.lambda$dispatchMessageToQueue$0$io-flutter-embedding-engine-dart-DartMessenger(DartMessenger.java:319)
E/MethodChannel#dev.fluttercommunity.workmanager/foreground_channel_work_manager(15175): 	at io.flutter.embedding.engine.dart.DartMessenger$$ExternalSyntheticLambda0.run(D8$$SyntheticClass:0)
E/MethodChannel#dev.fluttercommunity.workmanager/foreground_channel_work_manager(15175): 	at android.os.Handler.handleCallback(Handler.java:991)
E/MethodChannel#dev.fluttercommunity.workmanager/foreground_channel_work_manager(15175): 	at android.os.Handler.dispatchMessage(Handler.java:102)
E/MethodChannel#dev.fluttercommunity.workmanager/foreground_channel_work_manager(15175): 	at android.os.Looper.loopOnce(Looper.java:232)
E/MethodChannel#dev.fluttercommunity.workmanager/foreground_channel_work_manager(15175): 	at android.os.Looper.loop(Looper.java:317)
E/MethodChannel#dev.fluttercommunity.workmanager/foreground_channel_work_manager(15175): 	at android.app.ActivityThread.main(ActivityThread.java:8934)
E/MethodChannel#dev.fluttercommunity.workmanager/foreground_channel_work_manager(15175): 	at java.lang.reflect.Method.invoke(Native Method)
E/MethodChannel#dev.fluttercommunity.workmanager/foreground_channel_work_manager(15175): 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:591)
E/MethodChannel#dev.fluttercommunity.workmanager/foreground_channel_work_manager(15175): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:911)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions