相关疑难解决方法(0)

为什么viewModelScope.launch默认运行在主线程上

在我学习协程以及如何在 android 应用程序中正确使用它们时,我发现了一些令我感到惊讶的事情。

在启动viewModelScope.launch { }lambda 中使用并设置断点启动协程时,我注意到我的应用程序不再响应,因为它仍在主线程上。

这让我感到困惑,因为文档viewModelScope.launch { }明确指出:

在不阻塞当前线程的情况下启动一个新的协程

当前线程不是主线程吗?如果默认情况下它不在不同的线程上运行,那么启动的全部目的是什么?

我能够viewModelScope.launch(Dispatchers.IO){ }在另一个线程上使用它按我的预期工作,即在另一个线程上运行它。

我试图通过该launch方法完成的是调用存储库并执行一些 IO 工作,即调用 Web 服务并将数据存储在房间数据库中。所以我想调用viewModelScope.launch(Dispatchers.IO){ }在不同的线程上完成所有工作,最后更新 LiveData 结果。

viewModelScope.launch(Dispatchers.IO){ liveData.postValue(someRepository.someWork()) }

所以我的第二个问题是,这是要走的路吗?

multithreading android coroutine android-architecture-components

18
推荐指数
3
解决办法
3502
查看次数

Kotlin –简单的倒数计时器

我知道如何在Java中创建一个简单的20秒倒数计时器。但是我想在Kotlin中创建这个。

package android.os;

new CountDownTimer(20000, 1000) {
    public void onTick(long millisUntilFinished) {
        mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
    }
    public void onFinish() {
        mTextField.setText("Time's finished!");
    }
}.start();
Run Code Online (Sandbox Code Playgroud)

如何使用Kotlin做到这一点?

android countdowntimer kotlin

12
推荐指数
9
解决办法
1万
查看次数