O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

«Buzzwords everywhere, или Борьба с ветряными мельницами», Артём Дроздов, Mail.Ru Group

6.844 visualizações

Publicada em

В своем докладе Артём рассмотрит вопрос, возможно ли решение «главной проблемы» в Андроид-разработке без использования MVP, MVVM, RxJava и EventBus.

Publicada em: Software
  • Login to see the comments

«Buzzwords everywhere, или Борьба с ветряными мельницами», Артём Дроздов, Mail.Ru Group

  1. 1. Борьба с ветряными мельницами
  2. 2. ●  MVC/MVP/MVVM ●  RxJava ●  EventBus
  3. 3. public class SuperPuperActivity extends Activity { private void onSomeButtonClicked() { new AsyncTask<Void, Void, Bitmap>() { protected Bitmap doInBackground(Void... params) { return downloadSashaGreyPhoto(); } protected void onPostExecute(Bitmap bitmap) { showPhoto(bitmap); } }.execute(); } private Bitmap downloadSashaGreyPhoto() {...} private void showPhoto(Bitmap bitmap) {...} }
  4. 4. Как нам поможет MVP?
  5. 5. public class PhotoDownloader { public interface DownloadCallback { void onDownloaded(Bitmap bitmap); } public void downloadSashaGreyPhoto(DownloadCallback callback) { //... callback.onDownloaded(bitmap); } }
  6. 6. public class SuperPuperActivity extends Activity { private PhotoDownloader downloader = //some magic goes here; private void onSomeButtonClicked() { downloader.downloadGreyPhoto(new PhotoDownloader.DownloadCallback() { public void onDownloaded(final Bitmap bitmap) { runOnUiThread(() -> showPhoto(bitmap)); } }); } private void showPhoto(Bitmap bitmap) {...} }
  7. 7. Время жизни результата (состояния) 1. Запретить поворот и не хранить состояние. 2. Сбрасывать состояние при повороте и не хранить состояние. 3. Сохранять состояние на время поворота. 4. Сохранять состояние на время жизни процесса. 5. Сохранять состояние даже при перезапуске процесса. 6. Сохранять состояние при перезапуске процесса, включая промежуточные результаты.
  8. 8. public void addListener(DownloadListener listener) { listeners.add(listener); } public void removeListener(DownloadListener listener) { listeners.remove(listener); } private void notifyPhotoDownloaded(Bitmap bitmap) { for (DownloadListener listener : listeners) { listener.onDownloaded(bitmap); } }
  9. 9. private Bitmap cachedPhoto; public void attachListener(DownloadListener listener) { Bitmap bitmap = cachedPhoto; if (bitmap != null) { listener.onDownloaded(bitmap); } listeners.add(listener); }
  10. 10. public void downloadSashaGreyPhoto() { executor.execute(new Runnable() { public void run() { downloadSashaGreyPhotoSync(); } }); } private void downloadSashaGreyPhotoSync() { //... runOnUiThread(new Runnable() { public void run() { cachedPhoto = bitmap; notifyPhotoDownloaded(bitmap); } }); }
  11. 11. private final PhotoDownloader.DownloadListener listener = new PhotoDownloader.DownloadListener() { @Override public void onDownloaded(Bitmap bitmap) { showPhoto(bitmap); } }; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); downloader.attachListener(listener); } protected void onDestroy() { super.onDestroy(); downloader.removeListener(listener); } private void onSomeButtonClicked() { downloader.downloadSashaGreyPhoto(); }
  12. 12. private PhotoDownloader downloader = //some magic goes here;
  13. 13. private PhotoDownloader downloader = PhotoDownloader.getInstance();

×