在 Compose 中,视图的状态和生命周期更新与常规 Android 视图不同。如果未正确处理视图的生命周期,可能会导致内存泄漏。以下是一个示例代码,演示如何在 Compose 中避免视图内存泄漏并释放视图的资源。
@Composable
fun ExampleView() {
val viewModel: ExampleViewModel = viewModel()
val data by viewModel.exampleData.observeAsState()
DisposableEffect(Unit) {
onDispose {
viewModel.clearExampleData()
}
}
Column {
data?.let { exampleData ->
Text(text = "Example Data: ${exampleData.data}")
}
}
}
class ExampleViewModel : ViewModel() {
private val repository = ExampleRepository()
private var _exampleData = MutableLiveData()
val exampleData: LiveData = _exampleData
init {
fetchExampleData()
}
private fun fetchExampleData() {
viewModelScope.launch {
val exampleData = repository.getExampleData()
_exampleData.value = exampleData
}
}
fun clearExampleData() {
_exampleData.value = null
}
}
data class ExampleData(val data: String)
class ExampleRepository {
suspend fun getExampleData(): ExampleData {
// example network request or database query
delay(5000)
return ExampleData("Hello World!")
}
}
在上面的代码示例中,DisposableEffect
将在视图被销毁时调用 viewModel.clearExampleData()
方法,以确保释放视图资源。此外,每当状态变化时,Compose 还会自动销毁视图并重新创建,因此可以保证视图的正确性和资源释放。