IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 安卓将任务加入任务队列并依次处理 -> 正文阅读

[移动开发]安卓将任务加入任务队列并依次处理

????????先说下思路,为了让任务一次执行,需要定义一个队列,以及一个正在执行的标志。
????????任务来了之后,首先是判断当前队列是否为空,如果队列为空,或者正在执行,则加入队列中。否则直接执行处理。
????????处理任务的过程中,需要将标记置为执行中,执行完成需要将标记置为执行完成,并且调用执行方法,传个空值。接收到空值之后,则去取队列下个任务,并且执行;如果队列为空,则停止执行,并将正在执行标志置为false。

class SpeakQueue {
    // 是否正在播放
    private var speaking: Boolean = false

    // 创建队列
    private var mesQueue: Queue<String>? = null

    /**
     * 监听RabbitMQ
     */
    fun listenQueue(context: Context) {
        mesQueue = LinkedBlockingQueue<String>(10000)
        RabbitMQUtil.getInstance().receiveQueueMessage("00", object : RabbitMQUtil.ReceiveMessageListener {
            override fun receiveMessage(message: String?) {
                Log.d("消息:", message)
                // 这里开始进行队列插入或者执行操作
                speakMessage(message.toString(), context)
            }
        })
    }

    /**
     * 判断加入队列还是直接执行
     */
    fun speakMessage(callMessage: String, context: Context) {
        if (speaking || !mesQueue!!.isEmpty()) {
            // 正在执行操作或者队列不为空,则插入队列
            mesQueue!!.offer(callMessage)
        } else {
            // 已经结束操作,则开始下一个操作
            speak(callMessage, context)
        }
    }

    /**
     * 主逻辑代码
     */
    fun speak(refText: String, context: Context) {
        if (!TextUtils.isEmpty(refText)) {
            speaking = true
            object : Thread() {
                override fun run() {
                    super.run()
                    try {
                        //休眠3秒
                        sleep(1000)
                    } catch (e: InterruptedException) {
                        e.printStackTrace()
                    }
                    /**
                     * 要执行的操作
                     */
                    runOnUiThread {
                        Log.d("消息222:", refText)
                        showToast(context, "我就是一条消息")
                        speaking = false

                        object : Thread() {
                            override fun run() {
                                super.run()
                                try {
                                    sleep(1000) //休眠3秒
                                } catch (e: InterruptedException) {
                                    e.printStackTrace()
                                }
                                /**
                                 * 要执行的操作
                                 */
                                runOnUiThread {
                                    Log.d("消息333:", refText)
                                    //当前播放完毕,则给个空,从消息队列取消息执行
                                    speak("", context)
                                }
                            }
                        }.start()
                    }
                }
            }.start()
        } else {
            val callMessage: String? = mesQueue!!.poll()
            if (callMessage != null) {
                //获取消息,并且执行
                speak(callMessage, context)
            } else {
                //消息为空,则认为执行完了
                speaking = false
            }
        }
    }

}
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-04-24 09:34:21  更:2022-04-24 09:35:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 0:01:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码