当前位置: 首页 > news >正文

kotlin定时器和主线程定时器

场景

最近要用kotlin写一个每隔一段时间切视频并截图

刷刷的就写出来了,很快啊

timerTask = object : TimerTask() {override fun run() {captureWindow()if ((group + 1) * 4 >= urls.size) {showDialog()timerTask.cancel()timer.cancel()}group++updatePlayers()}
}
timer = Timer()
timer.schedule(timerTask, 15000, 15000)

结果一运行就闪退了

Player is accessed on the wrong thread
java.lang.IllegalStateException: Player is accessed on the wrong thread.
Current thread: 'Timer-0'
Expected thread: 'main'

https://developer.android.com/media/media3/exoplayer/hello-world#a-note-on-threading

它意思是 Exoplayer 的实例必须从主线程访问,但是呢,我们现在是在定时器子线程(Timer-0)内部访问的

一直和单线程 js 打交道的人生,哪里懂得什么主线程子线程/(ㄒoㄒ)/~~

思路一

如果让子线程发送 Event 到主线程,由主线程响应,然后主线程去操作 Exoplayer,不就好了吗

悲伤的是,AI 写的代码驴头不对马嘴,只能自己去官方文档上现学。

https://kotlinlang.org/api/latest/jvm/stdlib/org.w3c.dom.events/-event-target/

结果搜了半天,发现唯一与 Event 有关的是“活动”

kotlin 好像和 js 这种不大一样,js 的核心就是处理事件和响应事件,但是 kotlin 不是为这方面设计的

不过我觉得往这个方向没问题,可能需要学习协程相关的吧

思路二

虽然没有 setInterval,但是 kotlin 是有等效于 setTimeout 的方法的
android.os.Handler 可以实现过一段事件执行某段代码

Handler(Looper.getMainLooper()).postDelayed({captureWindow()if ((group + 1) * 4 >= urls.size) {showDialog()}group++updatePlayers()},15000
)

接着发挥传统艺能把 setTimeout 改写为 setInterval

    private fun updateEvery15s() {fun mySetTimeout() {Handler(Looper.getMainLooper()).postDelayed({captureWindow()if ((group + 1) * 4 >= urls.size) {showDialog()} else {group++updatePlayers()mySetTimeout()}},if (group == 0) 20000 else 15000)}mySetTimeout()}

完成!

http://www.lryc.cn/news/472116.html

相关文章:

  • vscode不能执行vue命令/ vue : 无法加载文件
  • 1.4 STL C++面试问题
  • Bash、sh 和 Shell都弄混了?
  • 架构师备考专栏-导航页
  • STM32-Cube定时器TIM
  • Webpack 是什么? 解决了什么问题? 核心流程是什么?
  • Jenkins面试整理-Jenkins 的主要用途是什么?
  • Linux下使用C/C++进行UDP网络编程
  • 【JavaEE初阶】网络原理—关于TCP协议值滑动窗口与流量控制,进来看看吧!!!
  • 无人机避障——使用三维PCD点云生成的2D栅格地图PGM做路径规划
  • supermall项目上拉加载bug分析
  • 【linux网络编程】| socket套接字 | 实现UDP协议聊天室
  • 第二届开放原子大赛-开源工业软件算法集成大赛即将启动!
  • PXC集群(Percona XtraDB Cluster )
  • 分布式光伏是什么意思?如何高效管理?
  • 提问GPT
  • 李飞飞团队新突破:低成本高泛化机器人训练法,零样本迁移成功率90%!
  • PHP内存马:不死马
  • 【python】OpenCV—Connected Components
  • 【优选算法篇】前缀之序,后缀之章:于数列深处邂逅算法的光与影
  • win10 更新npm 和 node
  • 搜索引擎算法更新对网站优化的影响与应对策略
  • 使用 Q3D 计算芯片引线的 AC 和 DC R 和 L
  • 前端_008_Vite
  • ssm007亚盛汽车配件销售业绩管理统(论文+源码)_kaic
  • 如何使用python完成时间序列的数据分析?
  • 数字ic设计,Windows/Linux系统,其他相关领域,软件安装包(matlab、vivado、modelsim。。。)
  • SD-WAN分布式组网:构建高效、灵活的企业网络架构
  • Task :prepareKotlinBuildScriptModel UP-TO-DATE,编译卡在这里不动或报错
  • unseping攻防世界