首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >暂停在Kotlin-Android中进行用户交互的持续迭代过程。

暂停在Kotlin-Android中进行用户交互的持续迭代过程。
EN

Stack Overflow用户
提问于 2019-09-02 14:29:59
回答 1查看 58关注 0票数 0

我一直在做一个通过蓝牙打印机打印给定文档的功能。过了一段时间,客户端希望打印每个文档的多份副本,为此,我修改了我现有的代码。

代码语言:javascript
复制
> var count = 5
>         for ((key, value) in printHashMap) {
>       if (key == "BILL_PRINT"){
>     
>                     if (type == "0") {
>                         
>     
>                         for(i in 1 until count) {
>                             
>                                 var dialog = SweetAlertDialog(context, SweetAlertDialog.BUTTON_CONFIRM)
>                                 dialog.setTitleText("Printing Copy ($i)")
>                                         .showCancelButton(false)
>                                         .setCancelText("No")
>                                         .setCancelClickListener { sDialog ->
>                                             sDialog.dismiss()
>                                             //need to break the loop exit to the outer For-Loop
>     
>                                         }
>                                         .setConfirmText("Yes")
>                                         .setConfirmClickListener { sDialog ->
>                                             sDialog.dismissWithAnimation()                                       
>     
>                                             ioScope.launch {
>                                                 runBlocking {
>     
>                                                     if (printingDone(value)) {
>     
>                                                         Log.d("Printer", "Printer Done")                                      
> 
>     
>                                                     }else{
>                                                       Log.d("Printer", "Printer Error")   
>                                                       //need to break the loop exit to the outer For-Loop
>                                                     }
>                                                 }
>                                             }
>     
>                                             prograssDialog.dismissWithAnimation()
>     
>                                         }
>                                         .show()
>                             
>                         }
>     
>     
>     
>     
>                     }
>     
>                 }
>             }

因此,根据代码,我想暂停这个过程以便用户确认,如果用户说‘是’,那么打印机应该开始打印文档的副本。如果用户说“不”,那么循环就会出现,并继续使用外部For-循环。当我运行这个函数时,我在Logcat上得到以下消息:

跳过255帧!应用程序可能在其主线程上做了太多的工作。

我甚至尝试过While循环阻塞和线程处理,但它们中的任何一种似乎都不像预期的那样起作用。实现这种用例的正确方法是什么?任何形式的指导都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-02 15:25:46

基本上,不要阻止UI线程。您可以做的就是在后台打印内容(我个人喜欢使用anko的doAsync,在需要时在UI线程(与runOnUiThread)上弹出一个对话框。

这样你就不会阻塞用户界面,系统也不会抱怨

编辑:,我也使用回调函数来识别打印任务是否完成。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57758684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档