Android MVP шаблон на утечку памяти - PullRequest
0 голосов
/ 30 декабря 2018

В настоящее время я использую шаблон MVP на Android с контрактом.Например, мой интерактор выглядит следующим образом:

interface MainInteractor {
    interface Activity {
        //function here
    }

    interface Presenter {
        //function here
    }
}

, а мой класс Presenter содержит что-то вроде этого

class MainPresenter(
    var activity : MainInteractor.Activity
) : MainInteractor.Presenter {

    //interface function that calls API (async)
    fun callNetwork() {
        //code here 
    }
}

В некотором смысле я хочу знать, приведет ли этот тип шаблона к утечке памятиесли вызывающая сеть еще не завершена, но действие уже уничтожено.Я знаю для AsyncTask, слабая ссылка будет использоваться, чтобы избежать утечки памяти.Это тот же случай здесь?И если это вызывает утечку памяти, есть ли способ исправить это, кроме слабой ссылки.

1 Ответ

0 голосов
/ 30 декабря 2018

Вы можете сделать метод attach и detach.В приложении вы можете что-то инициализировать, в отдельности вы можете что-то завершить.Например, вы можете установить значение NULL для переменной интерфейса контракта активности и во всех ваших обратных вызовах до проверки метода вызова, если не NULL.

Случай с AsyncTask не похож на ваш случай.С AsyncTask мы передали ссылку View или Activity, это означает, что после поворота предыдущее действие / представление уничтожено, но у асинхронной задачи есть старая ссылка, и GC не может очистить память.

...