我试图在Flutter中创建后台计时器,每n秒调用一次。调用AndroidAlarmManager.periodic应该每2秒运行一次printHello函数,但是看起来它是以更大的间隔随机调用的。我在做什么错?
import 'package:android_alarm_manager/android_alarm_manager.dart'; void runTimer() async{ await AndroidAlarmManager.periodic(const Duration(seconds: 2), 0, printHello, exact: true); } void printHello(){ print("Hello"); } main() async { await AndroidAlarmManager.initialize(); runApp(MyApp()); } class MyApp extends StatelessWidget { // This widget is the root of your application. @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Demo', home: Scaffold( body: Center( child: InkWell(onTap: runTimer, child: Container(child: Text('Run Timer'))), ), ), ); } }
您无法通过以下时间安排警报AlarmManager:
AlarmManager
注意:从API 19(Build.VERSION_CODES.KITKAT)开始,警报传递是不精确的:操作系统将转移警报,以最大程度地减少唤醒和电池消耗。有一些新的API支持需要严格交付保证的应用程序。请参见setWindow(int,long,long,android.app.PendingIntent)和setExact(int,long,android.app.PendingIntent)。targetSdkVersion早于API 19的应用程序将继续看到以前的行为,在该行为中,所有警报均在请求时准确传递。
请参阅:https://developer.android.com/reference/android/app/AlarmManager