#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);
});
}