Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Рефакторинг на архитектуру MVP #6

Merged
merged 7 commits into from
Jun 15, 2020

Conversation

yuhnin-m
Copy link
Owner

Рефакторинг проекта по паттерну MVP

Произвел рефакторинг и изменение архитектуры на MVP с использованием библиотеки Moxy.

Удалил существующий сервис загрузки контактов

Всю работу по загрузке контактов перенс в репозиторий

Проблемы

Очень долго провозился с проблемой дублирования библиотек Moxy от com.arellomobile и tech.schoolhelper. Перепробовал кучу всего. Нашел только такое решение.

Столкнулся с проблемой, что getViewState() в презенторе возвращает null. Вполне возможно, я что-то забыл добавить, а может быть как раз виновато то, что я сделал для решения конфликта библиотек.

Поискал в инете, у людей тоже была такая проблема

Вопросы

  • Скорее всего глупый вопрос: нужно ли в onDestroy уничтожать ссылку на презентер?

  • Как предпочтительнее решать ситуацию с тем, что из репозитория из асинхронной функции callback вызывается не в главном потоке:

    • Использовать AsyncTask (но я вроде в лекциях слышал, что он уже устаревает) и вызывать callback в onPostExecute;

    • Использовать такую конструкцию

      getActivity().runOnUiThread(new Runnable() {
          @Override
          public void run() {
              // ...
          }
      });
      
  • Использовать Handler

yuhnin-m added 2 commits June 10, 2020 17:56
 - Удален сервис
 - Вся загрузка контактов в репозитории
 - Добавлена библиотека Moxy
 - Обновлен README
@yuhnin-m yuhnin-m requested a review from goblinr June 11, 2020 07:21
@goblinr
Copy link
Collaborator

goblinr commented Jun 11, 2020

Столкнулся с проблемой, что getViewState() в презенторе возвращает null

Нужно пользоваться аннотацией @InjectViewState у презентера

Скорее всего глупый вопрос: нужно ли в onDestroy уничтожать ссылку на презентер?

Не нужно. Lifecycle презнтера Moxy - дольше чем lifecycle фрагмента. Поэтому утечек памяти не должно произойти. Но вот обратная ситуация - если у тебя будет жесткая ссылка на фрагмент внутри презентера - это уже гарантированная утечка памяти

Как предпочтительнее решать ситуацию с тем, что из репозитория из асинхронной функции callback вызывается не в главном потоке

На самом деле, ты можешь уже начать использовать RxJava - это будет лучше тех вариантов перечисленных тобою. Но если ты хочешь идти последовательно, то Handler.post в презентере.

yuhnin-m added 2 commits June 11, 2020 13:20
- Добавил NonNull вместо проверки
- Перенс проверку получения слабой ссылки
- В репозиторий передается контекст приложения
 - Работа с потоками вынесена в презентер
 - Репозиторий помечен как NonNull
@yuhnin-m yuhnin-m merged commit 89efce6 into master Jun 15, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants