作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我定期(每 3 秒)需要阅读一些 RealmObject
的列表s 并且我想将这些对象映射到将用于填充列表内容的简单数据对象。
对于那些想知道的人来说,有以下三个原因:
ViewHolder
中 View 的值和行为(可见性,即)的复杂性很大s 在我的情况下 ListAdapter
需要提供DiffUtilCallback
它将在除 UI 之外的某个其他线程上执行,因此无法在其方法中进行所需的计算,因为它们将在未创建它们的线程中使用。 newSingleThreadContext("RealmSingleThreadContext")
例如:
class RealmSingleThreadContext {
val ctx = NewSingleThreadedContext("RealmSingleThreadContext")
lateinit var realm : Realm
init {
// opening Realm connection for thread "RealmSingleThreadContext"
GlobalScope.launch(ctx) { realm = Realm.getDefaultInstance() }
}
fun close() {
GlobalScope.launch(ctx) { if (!realm.isClosed()) realm.close() }
}
}
onClosed
方法
close()
这个类的方法。
class HomeViewModel @Inject constructor(/* other */var realmSingleThreadContext: RealmSingleThreadContext) {
var topLiveEventsUI: MutableLiveData<List<EventPreviewUI>> = MutableLiveData(listOf())
fun useRealmInBckg() {
viewModeScope.launch(realmSingleThreadContext.ctx) {
topLiveEventsUI.postValue(eventsReadUseCase.getTopLiveEvents()
.map{ mapper.map(it) }
}
}
}
newSingleThreadContext(name: String)
有
@ObsoleteCoroutineApi
注释,所以这意味着它很快就会被删除。
最佳答案
从 Java 执行程序制作自己的单线程调度程序非常容易:
val singleThreadContext = Executors.newSingleThreadExecutor().asCoroutineDispatcher()
关于multithreading - 强制挂起的函数在一个线程上工作以在后台映射 Realm 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56326441/
我是一名优秀的程序员,十分优秀!