В качестве эксперимента я попробовал следующее < /p>
Ниже приведен код ViewModel. < /p>
Код: Выделить всё
class MainViewModel : ViewModel() {
private val _value = MutableStateFlow(-1)
val value = _value.asStateFlow()
var count = 0
fun startUpdate() {
viewModelScope.launch(Dispatchers.IO) {
async {
updateFrom1()
}
async {
updateFrom1000()
}
}
}
fun updateValue(value: Int) {
_value.update { value }
}
suspend fun updateFrom1() = withContext(Dispatchers.IO) {
for (i in 1..1000) {
updateValue(i)
Log.d("Ujjwal", "UpdateFrom1 :$i")
}
}
suspend fun updateFrom1000() = withContext(Dispatchers.IO) {
for (i in 1000 downTo 1) {
updateValue(i)
Log.d("Ujjwal", "UpdateFrom1000 :$i")
}
}
}
< /code>
И вот мой код деятельности < /p>
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val viewmodel = MainViewModel()
setContent {
MyApplicationTheme {
// A surface container using the 'background' color from the theme
MyFunction(viewmodel)
}
}
}
}
@Composable
fun MyFunction(viewModel: MainViewModel) {
val value by viewModel.value.collectAsState()
when (value) {
else -> {
viewModel.count = viewModel.count + 1
Text(text = "value is ${viewModel.count}")
Log.d("Ujjwal", "count is : ${viewModel.count}")
}
}
LaunchedEffect(Unit ){
viewModel.startUpdate()
}
}
Для функции я попробовал следующий вариант, но ни один из них не сработал < /p>
fun updateValue(value: Int) {
_value.update { value }
}
fun updateValue(value: Int) {
viewModelScope.launch {
_value.update { value }
}
}
fun updateValue(value: Int) {
viewModelScope.launch(Dispatchers.IO) {
_value.update { value }
}
}
fun updateValue(value: Int) {
viewModelScope.launch(Dispatchers.IO) {
_value.value = value
}
}
fun updateValue(value: Int) {
viewModelScope.launch {
_value.value = value
}
}
fun updateValue(value: Int) {
viewModelScope.launch {
_value.emit(value)
}
}
fun updateValue(value: Int) {
viewModelScope.launch(Dispatchers.IO) {
_value.emit(value)
}
}
suspend fun updateValue(value: Int) = withContext(Dispatchers.IO) {
_value.emit(value)
}
suspend fun updateValue(value: Int) = withContext(Dispatchers.IO) {
_value.value = value
}
fun updateValue(value: Int) {
viewModelScope.launch {
mutex.withLock {
_value.value = value
}
}
}
< /code>
Есть ли что -то, чего мне не хватает, или у меня есть неправильное предположение о том, как должно вести себя Stateflow? COUNT (обычно около 8-14). < /p>
Если в случае, если мы обязаны потерять событие, есть ли способ захватить эти события, что наиболее важно, чтобы захватить последнее значение, по крайней мере (последнее значение)
Подробнее здесь: https://stackoverflow.com/questions/744 ... le-threads
Мобильная версия