«buzzwords everywhere, или Борьба с ветряными мельницами», Артём...

20
Борьба с ветряными мельницами

Upload: mailru-group

Post on 20-Mar-2017

6.441 views

Category:

Software


4 download

TRANSCRIPT

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

Борьба с ветряными мельницами

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

●  MVC/MVP/MVVM ●  RxJava ●  EventBus

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

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) {...} }

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

Как нам поможет MVP?

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

public class PhotoDownloader { public interface DownloadCallback { void onDownloaded(Bitmap bitmap); } public void downloadSashaGreyPhoto(DownloadCallback callback) { //... callback.onDownloaded(bitmap); } }

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

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) {...} }

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

Время жизни результата (состояния)

1. Запретить поворот и не хранить состояние. 2. Сбрасывать состояние при повороте и не хранить состояние. 3. Сохранять состояние на время поворота. 4. Сохранять состояние на время жизни процесса. 5. Сохранять состояние даже при перезапуске процесса. 6. Сохранять состояние при перезапуске процесса, включая промежуточные результаты.

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

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); } }

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

private Bitmap cachedPhoto; public void attachListener(DownloadListener listener) { Bitmap bitmap = cachedPhoto; if (bitmap != null) { listener.onDownloaded(bitmap); } listeners.add(listener); }

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

public void downloadSashaGreyPhoto() { executor.execute(new Runnable() { public void run() { downloadSashaGreyPhotoSync(); } }); } private void downloadSashaGreyPhotoSync() { //... runOnUiThread(new Runnable() { public void run() { cachedPhoto = bitmap; notifyPhotoDownloaded(bitmap); } }); }

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

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(); }

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

private PhotoDownloader downloader = //some magic goes here;

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

private PhotoDownloader downloader = PhotoDownloader.getInstance();

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