flutter在与主线程不同隔离区使用定时器
文章目录
- android_alarm_manager
- 使用
- 效果
android_alarm_manager
一个Flutter插件,用于访问Android AlarmManager服务(定时服务,并且和主线程不在一个隔离区中,程序退出后还会继续执行定时器),并在警报触发时在后台运行Dart代码。
地址:https://github.com/flutter/plugins/tree/master/packages/android_alarm_manager
使用
添加依赖:
android_alarm_manager: ^0.4.1+6
如果程序运行报错,那就把依赖包下载下来放到项目中。
在
AndroidManifest.xml
中添加权限<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <uses-permission android:name="android.permission.WAKE_LOCK"/>
并且在
<application></application>
标签中添加:<serviceandroid:name="io.flutter.plugins.androidalarmmanager.AlarmService"android:permission="android.permission.BIND_JOB_SERVICE"android:exported="false"/> <receiverandroid:name="io.flutter.plugins.androidalarmmanager.AlarmBroadcastReceiver"android:exported="false"/> <receiverandroid:name="io.flutter.plugins.androidalarmmanager.RebootBroadcastReceiver"android:enabled="false"><intent-filter><action android:name="android.intent.action.BOOT_COMPLETED"></action></intent-filter> </receiver>
在
Application
中注册。public class Application extends FlutterApplication implements PluginRegistrantCallback {@Overridepublic void onCreate() {super.onCreate();AlarmService.setPluginRegistrant(this);}@Overridepublic void registerWith(PluginRegistry registry) {GeneratedPluginRegistrant.registerWith(registry);} }
如果不在
application
中调用setPluginRegistrant()
方法,将会抛出异常。在dart文件中初始化并使用。
import 'dart:async'; import 'package:android_alarm_manager/android_alarm_manager.dart'; import 'package:flutter/widgets.dart';void printMessage(String msg) => print('[${DateTime.now()}] $msg');void printPeriodic() => printMessage("Periodic!"); void printOneShot() => printMessage("One shot!");Future<void> main() async {final int periodicID = 0;final int oneShotID = 1;// 初始化AlarmManager service.await AndroidAlarmManager.initialize();printMessage("main run");runApp(const Center(child:Text('See device log for output', textDirection: TextDirection.ltr)));//每隔1分钟调用一次,一直调用await AndroidAlarmManager.periodic(const Duration(seconds: 1), periodicID, printPeriodic,wakeup: true);//只调用一次await AndroidAlarmManager.oneShot(const Duration(seconds: 1), oneShotID, printOneShot); }
效果
控制台打印日志:
flutter在与主线程不同隔离区使用定时器相关推荐
- c++主线程等待子线程结束_简单明了的 Python 多线程来了 | 原力计划
作者 | 万里羊责编 | 王晓曼出品 | CSDN博客线程和进程计算机的核心是CPU,它承担了所有的计算任务,就像是一座工厂在时刻运行.如果工厂的资源有限,一次只能供一个车间来使用,也就是说当一个车间 ...
- Android线程之主线程向子线程发送消息
和大家一起探讨Android线程已经有些日子了,谈的最多的就是如何把子线程中的数据发送给主线程进行处理,进行UI界面的更新,为什么要这样,请查阅之前的随笔.本篇我们就来讨论一下关于主线程向子线程如何发 ...
- python线程的注意点(线程之间执行是无序的、主线程会等待所有的子线程执行结束再结束(守护主线程)、线程之间共享全局变量、线程之间共享全局变量数据出现错误问题(线程等待(join)、互斥锁))
1. 线程的注意点介绍 线程之间执行是无序的 主线程会等待所有的子线程执行结束再结束 线程之间共享全局变量 线程之间共享全局变量数据出现错误问题 2. 线程之间执行是无序的 import thread ...
- java 父线程_Java父线程(或是主线程)等待所有子线程退出的实例
导读热词 实例如下: static void testLock1(){ final AtomicInteger waitCount = new AtomicInteger(30000); final ...
- 通过RunLoop监听主线程的卡顿
2019独角兽企业重金招聘Python工程师标准>>> 实现原理:开启子线程监控主线程的RunLoop的状态,并设定超时时间.如果发生了超时,而且此时RunLoop的状态为kCFRu ...
- python 中主线程结束 子线程还在运行么_python 线程之一:线程的创建、启动及运行方式
threading:这个模块在较低级的模块 _thread 基础上建立较高级的线程接口 以后我们就用 threading 模块来管理线程就可以了. Tread 类:控制线程创建.启动及运行方式 一.线 ...
- qt调用linux系统的线程函数吗,Qt之主线程与子线程通讯(linux下)
Qt之主线程与子线程通信(linux下) 转载请注明出处:http://blog.csdn.net/feng1790291543 主线程与子线程通信主要是通过Qt上的Gui按钮,触发使得主线程上的信息 ...
- 用Handler的post()方法来传递线程中的代码段到主线程中执行
自定义的线程中是不能更新UI的,但是如果遇到更新UI的事情,我们可以用handler的post()方法来将更新UI的方法体,直接传送到主线程中,这样就能直接更新UI了.Handler的post()方法 ...
- python主辅线程_python主线程捕获子线程的方法
最近,在做一个项目时遇到的了一个问题,主线程无法捕获子线程中抛出的异常. 先看一个线程类的定义 ''''' Created on Oct 27, 2015 @author: wujz ''' impo ...
最新文章
- 第八章 Health Check
- 金猪钱罐——青龙羊毛
- 自媒体运营要知道的哪些知识
- java socket 如何设置so_keepalive属性_socket通信的KeepAlive设定
- ThinkPHP笔记——配置分组产生无法加载Index错误解决办法
- 总结apply和call方法的使用 bind方法 bind方法的使用 函数中的几个成员
- 同一条sql insert 有时快有时慢 引发的血案
- matlab size x 2,Matlab中的N=size(X,2)是什么意思
- 电商系统的商品规格设计方案
- [转载]Bluetooth协议栈学习之SDP
- clocks_per_sec 时间不正确_你该拥有的不只是护肤品,还有正确护肤时间表
- 逻辑斯蒂回归与最大熵模型---最大熵模型
- Qt connect()的第五种重载[=](){}
- 常用技术指标与四大交易理论
- 7.Linux/Unix 系统编程手册(上) -- 内存分配
- javascript的一些各浏览器不兼容的地方
- STM32 产品与选型
- 推荐几个程序员赚钱的平台,你有技术就有钱!
- 清除Marco1!$A$1提示软件日志.
- 电脑如何登录两个微信