Цель
У меня есть вычисления тяжелой функции Расчеты: (String) -> Последовательность .
Я хочу загрузить выходы этого расчета, показывая прогресс пользователю и поддержание адаптации пользовательского интерфейса. Я также хочу отменить этот расчет в случае изменения ввода пользователя, и запустить снова, как только пользователь нажимает кнопку. Внутри производительности я передаю это вычисление не-мэйн-дисператорам, чтобы сохранить отзывчивый пользовательский интерфейс. Я также собираю элементы, излучаемые из этой последовательности, и обновляю прогресс по каждому полученному элементу. < /P>
val totalSize = 255 // for sake of this example
var input by rememberSaveable(stateSaver = TextFieldValue.Saver) {
mutableStateOf(TextFieldValue("Test Input"))
}
var doCalculation by rememberSaveable(input) {
mutableStateOf(false)
}
val resultState by produceState(
State.Null as State,
input,
doCalculation,
) {
value = DealingState.Null
if (!doCalculation) {
value = DealingState.Null
return@produceState
}
value = DealingState.Loading(
progress = 0,
required = totalSize,
)
launch(Dispatchers.Default) {
runCatching {
val resultList = mutableListOf()
calculateItems(input).forEach {
resultList.add(it)
value = State.Loading(
progress = resultList.size,
required = totalSize,
)
}
value = State.Success(resultList)
}.getOrElse {
value = State.Failure(it)
}
}
}
Что я попробовал
Я попробовал следующие вещи:
Определите сферу цифрового прицела специально для этой подпрограммы и Call.cancel () , когда будет создано новое состояние.val scope = CoroutineScope(Dispatchers.Default)
val resultState by produceState(...) {
scope.cancel()
....
scope.launch(Dispatchers.Default) {...}
}
< /code>
Храните задание от запуска < /code> и отменить задание или детей < /li>
< /ul>
var job: Job? = null
val resultState by produceState(...) {
job?.cancel() // and job?.cancelChildren()
....
job = launch(Dispatchers.Default) {...}
}
Подробнее здесь: https://stackoverflow.com/questions/795 ... d-in-produ
Android JetPack Compose: Как остановить выполнение COUROUTINE, запускаемой в `Productestate '? ⇐ Android
Форум для тех, кто программирует под Android
1743645832
Anonymous
[b] Цель [/b]
У меня есть вычисления тяжелой функции Расчеты: (String) -> Последовательность .
Я хочу загрузить выходы этого расчета, показывая прогресс пользователю и поддержание адаптации пользовательского интерфейса. Я также хочу отменить этот расчет в случае изменения ввода пользователя, и запустить снова, как только пользователь нажимает кнопку. Внутри производительности я передаю это вычисление не-мэйн-дисператорам, чтобы сохранить отзывчивый пользовательский интерфейс. Я также собираю элементы, излучаемые из этой последовательности, и обновляю прогресс по каждому полученному элементу. < /P>
val totalSize = 255 // for sake of this example
var input by rememberSaveable(stateSaver = TextFieldValue.Saver) {
mutableStateOf(TextFieldValue("Test Input"))
}
var doCalculation by rememberSaveable(input) {
mutableStateOf(false)
}
val resultState by produceState(
State.Null as State,
input,
doCalculation,
) {
value = DealingState.Null
if (!doCalculation) {
value = DealingState.Null
return@produceState
}
value = DealingState.Loading(
progress = 0,
required = totalSize,
)
launch(Dispatchers.Default) {
runCatching {
val resultList = mutableListOf()
calculateItems(input).forEach {
resultList.add(it)
value = State.Loading(
progress = resultList.size,
required = totalSize,
)
}
value = State.Success(resultList)
}.getOrElse {
value = State.Failure(it)
}
}
}
[b] Что я попробовал [/b]
Я попробовал следующие вещи:
Определите сферу цифрового прицела специально для этой подпрограммы и Call.cancel () , когда будет создано новое состояние.val scope = CoroutineScope(Dispatchers.Default)
val resultState by produceState(...) {
scope.cancel()
....
scope.launch(Dispatchers.Default) {...}
}
< /code>
Храните задание от запуска < /code> и отменить задание или детей < /li>
< /ul>
var job: Job? = null
val resultState by produceState(...) {
job?.cancel() // and job?.cancelChildren()
....
job = launch(Dispatchers.Default) {...}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79551856/android-jetpack-compose-how-to-stop-execution-of-a-coroutine-launched-in-produ[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия