Котлин сопрограммы диск нарушение строгого режима - PullRequest
0 голосов
/ 12 января 2019

у меня есть сопрограмма, осведомленная о жизненном цикле

abstract class AppViewModel : ViewModel(), CoroutineScope {

    private val job = Job()
    override val coroutineContext: CoroutineContext
        get() = Dispatchers.Main + job

    override fun onCleared() {
        super.onCleared()
        job.cancel()
    }
}

если я использую в моей модели представления

launch {

}

вызывает нарушение диска

D / StrictMode: нарушение политики StrictMode; ~ длительность = 200 мс: android.os.strictmode.DiskReadViolation

в этой строке

get() = Dispatchers.Main + job

что я делаю не так?

EDIT

Я создал другой пример, и эта ошибка все еще существует

class MainActivity : AppCompatActivity(), CoroutineScope {

    protected val job = SupervisorJob()
    override val coroutineContext = Dispatchers.Main + job

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        launch {
            val e = withContext(Dispatchers.Default) {
                4
            }

            text.text = e.toString()
        }
    }

    override fun onDestroy() {
        super.onDestroy()
        job.cancel()
    }
}

1 Ответ

0 голосов
/ 31 января 2019

Эта ошибка возникает при попытке выполнить запросы в потоке пользовательского интерфейса. В соответствии с вашим кодом попробуйте изменить контекст сопрограммы следующим образом:

//Code here stays same
override val coroutineContext: CoroutineContext
  get() = Dispatchers.IO + job
//Code here stays same

Итак, здесь вы запустите свои сопрограммы на IO-потоках и на UI-потоке.

Надеюсь, это поможет!

...