- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
结合 runBlocking
和 withContext
似乎可以发送消息注意:结束时间超过纪元:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
runBlocking {
withContext(DefaultDispatcher) {
null
}
}
}
}
我使用了很多这样的协程并且 logcat 是垃圾邮件,有什么办法可以避免这种情况吗?另一种方法,例如:
var projects: List<ProjectEntity>? = runBlocking {
withContext(DefaultDispatcher) {
//Get the ProjectEntity list
}
}
projects?.let {
onResult(projects)
}
编辑
我根据您的评论尝试了一些方法(谢谢),但我无法得到与上面示例类似的结果:
Log.d("Coroutines", "getMostRecent start")
var localeProject: ProjectEntity? = null
launch {
withContext(CommonPool) {
Log.d("Coroutines", "getRecentLocaleProject")
localeProject = getRecentLocaleProject()
}
}
Log.d("Coroutines", "check localeProject")
if (localeProject != null) {
//Show UI
}
在 Logcat 中:
D/Coroutines: getMostRecent start
D/Coroutines: check localeProject
D/Coroutines: getRecentLocaleProject
我想把异步和同步的东西分开,没有这样的办法吗?我真的很想尽可能避免我的存储库中的所有回调。
最佳答案
Markos 的评论是正确的,您不应该阻塞 UI 线程。
您应该使用 launch
或 async
并使用 withContext
切换回 UI 线程。
class MainActivity : ScopedAppActivity() {
fun asyncShowData() = launch { // Is invoked in UI context with Activity's job as a parent
// actual implementation
}
suspend fun showIOData() {
val deferred = async(Dispatchers.IO) {
// impl
}
withContext(Dispatchers.Main) {
val data = deferred.await()
// Show data in UI
}
}
}
请注意,该示例使用了新的协程 API (>0.26.0),它重命名了 Dispatchers。所以 Dispatchers.Main
对应旧版本中的 UI
。
关于android - Kotlin 协程 : Note: end time exceeds epoch:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52775333/
在我的设置中,我试图有一个界面 Table继承自 Map (因为它主要用作 map 的包装器)。两个类继承自 Table - 本地和全局。全局的将有一个可变的映射,而本地的将有一个只有本地条目的映射。
Rust Nomicon 有 an entire section on variance除了关于 Box 的这一小节,我或多或少地理解了这一点和 Vec在 T 上(共同)变体. Box and Vec
我是一名优秀的程序员,十分优秀!