android 关于内存泄漏的 MVP 模式
android MVP pattern on memory leak
目前我在 android 上使用 MVP 模式与合同。
所以在示例中我的交互器是这样的:
interface MainInteractor {
interface Activity {
//function here
}
interface Presenter {
//function here
}
}
我的 Presenter class 包含这样的内容
class MainPresenter(
var activity : MainInteractor.Activity
) : MainInteractor.Presenter {
//interface function that calls API (async)
fun callNetwork() {
//code here
}
}
从某种意义上说,我想知道如果调用网络尚未完成但 activity 已经被破坏,这种模式是否会导致内存泄漏。我知道对于 AsyncTask,将使用弱引用来避免内存泄漏。这里也是一样吗?如果它确实导致内存泄漏,除了弱引用之外还有什么方法可以修复它。
您可以创建方法 attach
和 detach
。在附加中你可以初始化一些东西,在分离中你可以完成一些东西。例如,您可以将 null 设置为您的 activity 合同接口变量,并在调用方法检查是否不为 null 之前在所有回调中设置。
AsyncTask 的案例与您的案例不相似。使用 AsyncTask 我们在 View 或 Activity link 内部传递,这意味着在旋转之前的 activity/view 被销毁之后,但是异步任务有旧的 link 并且 GC 无法清除内存。
目前我在 android 上使用 MVP 模式与合同。 所以在示例中我的交互器是这样的:
interface MainInteractor {
interface Activity {
//function here
}
interface Presenter {
//function here
}
}
我的 Presenter class 包含这样的内容
class MainPresenter(
var activity : MainInteractor.Activity
) : MainInteractor.Presenter {
//interface function that calls API (async)
fun callNetwork() {
//code here
}
}
从某种意义上说,我想知道如果调用网络尚未完成但 activity 已经被破坏,这种模式是否会导致内存泄漏。我知道对于 AsyncTask,将使用弱引用来避免内存泄漏。这里也是一样吗?如果它确实导致内存泄漏,除了弱引用之外还有什么方法可以修复它。
您可以创建方法 attach
和 detach
。在附加中你可以初始化一些东西,在分离中你可以完成一些东西。例如,您可以将 null 设置为您的 activity 合同接口变量,并在调用方法检查是否不为 null 之前在所有回调中设置。
AsyncTask 的案例与您的案例不相似。使用 AsyncTask 我们在 View 或 Activity link 内部传递,这意味着在旋转之前的 activity/view 被销毁之后,但是异步任务有旧的 link 并且 GC 无法清除内存。