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

Post on 20-Mar-2017

6,439 views 4 download

transcript

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

●  MVC/MVP/MVVM ●  RxJava ●  EventBus

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

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

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

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

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

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

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

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

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

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

private PhotoDownloader downloader = //some magic goes here;

private PhotoDownloader downloader = PhotoDownloader.getInstance();