在使用协程时,我们需要注意弱引用的使用,以避免内存泄漏。以下是一些示例代码:
class MyRunnable(val activity: WeakReference
viewModelScope.launch { // Do some work }.invokeOnCompletion { // Clean up resources }
fun cancel() { myWeakRef.get()?.let { it.lifecycle.removeObserver(observer) } myJob?.cancel() }
在以上示例中,使用WeakReference持有Activity的引用,以防止Activity在其生命周期结束时无法被回收。使用协程作用域自动取消Job可以避免在Activity销毁时发生的内存泄漏。在取消时释放弱引用可以保证不再需要这些引用时及时清理它们,释放内存。