Фоновые задачи с плагином Workmanager не работают в flutter

#android #flutter #background-process #android-workmanager

#Android #flutter #фоновый процесс #android-workmanager

Вопрос:

Я пытаюсь запустить некоторые фоновые задачи с помощью кнопки и нахожу плагин workmanager для flutter очень темпераментным. Это работает иногда, но это редко и далеко друг от друга.

Я тестирую его с помощью этого базового приложения:

 import 'package:flutter/material.dart';
import 'package:workmanager/workmanager.dart';

const task1 = "simpleTask";

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  Workmanager.initialize(
      callbackDispatcher, 
      isInDebugMode: true, 
  ); 
  //Workmanager.registerPeriodicTask("1", task1, initialDelay: Duration(seconds: 10), frequency: Duration(minutes: 15));
  //Workmanager.registerOneOffTask("1", task1, initialDelay: Duration(seconds: 5));
  runApp(MaterialApp(
  home: Scaffold(
    body: Container(
      color: Colors.blueAccent[400],
      child: Center(
        child: RaisedButton(
          child: Text("create notification in five seconds"),
          onPressed: () {
            Workmanager.registerOneOffTask("1", task1, initialDelay: Duration(seconds: 5));
          },
        ),
      ),
    ),
  ),
));}


void callbackDispatcher() {
  Workmanager.executeTask((task, inputData) {
    print("it's doing the task");
    switch (task) {
      case task1:
        print(task1);
        break;
      case Workmanager.iOSBackgroundTask:
        print("iOS background fetch delegate ran");
        break;
    }
    return Future.value(true);
});
}
  

Я пытаюсь запустить фоновую задачу с помощью кнопки, потому что она работала не так, как раньше, когда две строки были закомментированы. У меня тоже никогда не было Workmanager.registerPeriodicTask работы. Это может быть связано с тем, что начальная задержка не запускает первую задачу в конце, а вместо этого запускает 15-минутный таймер до первой, но это огромная проблема для тестирования, учитывая, что мне нужно ждать минимум 15 минут. минут.

Есть ли команда, которую я пропускаю, или необходимая await , которую я пропускаю, или что-то в этом роде?

Редактировать: я только что протестировал его на эмуляторе Android от AndroidStudio, и все уведомления работают точно так, как должны, как для разовых, так и для периодических задач, поэтому я думаю, что это как-то связано с телефоном, возможно. Не совсем уверен, что с этим делать.

Комментарии:

1. Привет. У вас есть решение для этого? У меня сейчас такая же проблема.

Ответ №1:

Я попробовал код, который вы предоставили, и единственная проблема, с которой я столкнулся, — это initialize() , registerOneOffTask() , и executeTask() не может быть доступен с помощью статического вызова из Workmanager. В остальном код работает нормально.

Как упоминалось в этом документе, фоновые задачи Android могут быть неоднородными, поскольку Android решает, когда лучше всего запускать. Не существует гарантированного способа принудительного выполнения задания даже в режиме отладки.

Ответ №2:

Я исправил эту ошибку, добавив @pragma(‘vm: entry-point’) в верхнюю строку безголовой (верхнего уровня) функции callbackDispatcher. Итак, вот так:

 @pragma('vm:entry-point')
void callbackDispatcher() {
  Workmanager().executeTask((task, inputData) async {
    print("Native called background task: $task");
    ....
    return Future.value(true);
  });
}
  

Источник: https://learnpainless.com/flutter/flutter-workmanager-not-working-in-release-mode-working-in-debug-mode/