Код: Выделить всё
abstract class Selection(
val name: String,
val condition: Condition,
val selectionMinValue: Int,
val selectionMaxValue: Int
) : ComposeRender, Validatable by condition, Parcelable {
var selectionValidationState by mutableStateOf(ValidationState.CORRECT)
var selectionHeaderListPosition: Int = 0
@Composable
abstract override fun render()
override fun check(): ValidationState {
return if (condition.currentQuantity in selectionMinValue..selectionMaxValue) {
ValidationState.CORRECT
} else if (condition.currentQuantity < selectionMinValue) {
ValidationState.NOT_ENOUGH
} else {
ValidationState.TOO_MANY
}
}
}
Было бы безопасно, если бы при создании объектов Selection я использовал viewModel.condition; где свойство находится в viewModel? Эта модель представления будет сохраняться на всех экранах; поскольку все данные взаимосвязаны; поскольку вложенным экранам и экранам захвата необходим доступ к данным, находящимся на разных уровнях; пройти весь путь через Дерево; для каждого экрана. Я не возражаю против утечки всего дерева данных, пока не происходит утечка представлений.
Будет ли утечка представления, созданного Composable, из-за того, что оно запоминает свойство внешнего класса, и этот внешний класс существует в древовидной структуре; который сохраняется на всех экранах? Есть ли способ обойти эту проблему?
Я хочу использовать эти ComposeRenders в качестве аргументов для моего NavHost, поэтому простая передача значений в функцию @Composable невозможна. не отличный вариант. Я рассматриваю возможность перемещения Composable за пределы объекта Selection; и вместо этого использовать какой-либо служебный класс в модели представления с такой функцией, как renderSelection; и когда вызывается renderSelection, он будет делать что-то вроде renderSelection(viewModel.selection);, а затем функция запоминания будет в области функции @Composable.
Или я мог бы использовать статическую функцию для renderSelection, чтобы снова ни на одно свойство в дереве не ссылался @Composable, на который ссылается объект в дереве.
/>Спасибо. Надеюсь, этот вопрос поможет другим людям, столкнувшимся с той же ситуацией!
Подробнее здесь: https://stackoverflow.com/questions/785 ... and-memory