- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我目前正在使用 Anko 的 doAsync 来处理异步任务。具体来说,我使用它来解析对数据对象的 ArrayList 的响应 json,如下所示:
// Asynchronously parse server response
doAsync {
val itemlist = parseResponse(response)
uiThread {
Otto.INSTANCE.post(UpdateRedeemedVoucherViewsEvent(itemlist))
}
}
大多数时候,就像在 Google Pixel (Android 8.0.0) 上一样,它工作得很好。我的对象得到解析,Otto 总线事件 将发布到 ui 线程。
但在极少数情况下,此过程会失败。到目前为止,我注意到 ui 线程调用不会在 Galaxy S5 Mini (Android 5.1.1) 上触发。虽然我的数据解析没有任何错误或异常,但 uiThread 括号中的代码 fragment 不会被执行。
到目前为止,我无法确定此行为的任何原因。没有 logcat 日志,什么都没有。没有关于何时会出现此错误的方案。
有人对 kotlin 和/或 Anko 有相同或类似的问题吗?
更新:我自己找到了解决方案,请在下面查看我的回答以获得解释。
最佳答案
谢谢大家的帮助。我自己弄明白了,所以我发布了这个答案,以防万一其他人遇到这个问题。
TL;DR:context 丢失,因此 uiThread 不会执行
解决方法:我偶然发现了这个 post其中提到了 uiThread 方法的一个重要特征:
Basically you have an async function that will execute it’s code in another thread, and will give the chance of returning main thread using uiThread. async is an extension function implemented for Context, and will use a weak reference of it, so it won’t prevent GC from releasing its memory.
经过进一步调查,我在解析完成后发现了以下日志,并且应该调用 uiThread 的位置:
I/art: Background partial concurrent mark sweep GC freed 30879(16MB) AllocSpace objects, 16(2MB) LOS objects, 40% free, 16MB/27MB, paused 2.123ms total 196.372ms
所以看起来确实有一些 GC 操作,这可能会或可能不会释放 context。
为了防止这种情况,我使用了 Ankos runOnUiThread,它可以在给定的上下文引用中调用:
// Asynchronously parse server response
doAsync {
val itemlist = parseResponse(response)
context.runOnUiThread {
Otto.INSTANCE.post(UpdateRedeemedVoucherViewsEvent(itemlist))
}
}
据我所知,这似乎已经成功了。
关于android - Anko 的 uiThread 偶尔不会被触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46795795/
我使用 Anko DSL 制作了这个警报,并且没有在分辨率较低的设备上显示。 dialog = alert { customView {
我正试图接触 Anko 并遇到了这个问题。在其文档中说 Anko 有一个 convenience methods for logging ,我试过了,但 Android Studio 不会自动导入它,
有没有办法使用 Anko 将主题和样式添加到布局中?谢谢 最佳答案 我只是谷歌了同样的问题,并找到了答案 here 主题 Anko 也支持通过在任何 View 或布局之前的 themed 前缀来覆盖
我正在显示带有消息和确定按钮的警报对话框。但是确定按钮的颜色和按钮的文本是相同的 context!!.alert ("this test message for the dialog aleat"){
有了 Anko,我可以写这样的东西来显示对话框: alert("Dialog title") { yesButton {} noButton {} }.show() 如何为按钮设置标题?
在 anko/kotlin 中做 horizontalLayout 的好方法是什么? verticalLayout 工作正常 - 可以在其上设置方向,但感觉不对。不知道我在那里缺少什么。 最佳答案
GitHub 仓库链接:https://github.com/mattn/anko 1. anko 是干嘛用的? anko 是一个可以让 Go 项目支持脚本语言的小工具。换句话说,就是我们可以给
当在 Anko 的警报生成器中使用 positiveButton 和 negativeButton 时,即使 dismiss() ,它们似乎都会导致关闭对话框不被调用。有什么方法可以在单击按钮后保持对
我有这个问题: 错误: C:\Users\avi12\OneDrive\Documents\AndroidApps\WhatsApp Easy Sticker Maker\app\src\main\j
我对android开发完全陌生,所以我几天前才安装了Android studio。我创建了一个支持 Kotlin 的新项目和一个空 Activity ,并想使用 anko 库创建一个对话框。 我的 M
我正在使用 anko bg 功能来管理后台任务。 代码如下 import com.github.kittinunf.fuel.core.FuelError import com.github.kitt
我创建了一个自定义样式: wrap_content wrap_content 5dp 然后我用静态函数扩展了anko: inline fun ViewManager.sta
关注this slightly outdated tutorial之后,我一直在尝试使用 org.jetbrains.anko.design.floatingActionButton。错误是: Can
我正在 Android Studio 中创建一个项目,并且正在使用 Anko 库在单独的线程上运行 API 请求。所述线程只是进行 HTTP GET 调用并解析数据,同时 UI 线程传递所述数据并启动
使用 Anko,可以很容易地访问之前定义的组件。例如: verticalLayout { val name = editText() button("Say Hello") {
Anko Commons - Intent Usage 我如何准确地将 RecyclerView Adapter/else 中 Anko Commons 的 Intent 用于新的 Activity?
我是 anko 和协程的新手,所以如果我问一些琐碎的事情,请原谅 :) 所以我想要做的是让用户点击一个按钮,然后我想从互联网上下载一个 JSON,将它存储在本地并解析它。由于这两个操作都需要相当长的时
我正在尝试使用 anko 在警报中添加微调器。到目前为止,我的代码如下所示: alert(getString(R.string.alert)) { positiveButton
我正在尝试使用 Anko Commons – Logging 但出于某种原因,详细信息和调试信息没有显示在 logcat 上 但是,当我使用 Log.d 时,它按预期工作。 当我尝试这段代码时 ver
我正在使用 Anko DSL 编写 Android 布局。在定义 TextView 时,我想让它居中对齐,所以我这样写: verticalLayout { textView(R.string.
我是一名优秀的程序员,十分优秀!