Учитывая следующий поток:

Я хочу, чтобы методы выполнялись этими потоками:
OnClick
(по системе): ui
OnRefresh
(1): ui
ReadDb
(2): рабочий
SetData
(3): UI
Я мог бы добиться этого, сделав ReadDb
async и ожидающими , но это бы заморозило поток пользовательского интерфейса.
Можете ли вы придумать подход, который не предусматривает реализацию Interactors
, AsyncTask
и т. Д.?
Спасибо.
Редактировать
Я ищу элегантное решение, избегайте упаковок типа new Handler (Looper.getMainLooper()).post(...)
, RunOnUiThread
в каждом методе View
и т. Д.
Самый простой подход - использовать taskt
и await
:
async OnRefresh() {
data = await m.ReadDb()
v.SetData(data)
}
Однако пользовательский интерфейс зависает await m.ReadDb()
. Я думал, что, поскольку OnRefresh
возвращает void
, он вернется и завершит выполнение родительского метода (OnClick
). Затем, как только await
будет сделано, он будет исполнять v.SetData(d)
. По какой-то причине я не получаю вывод.