Droidcon Londres. Comment c'était



L'autre jour à Londres, la conférence des droïdes a eu lieu. Des sujets à la mode comme Redux, MVI, l'optimisation de la vitesse de construction et les capacités Gradle ne sont pas passés. L'événement a été ouvert par un rapport de Chet Haase et Romain Guy sur la fragmentation de la mémoire et les différences entre les versions Garbage Collector d'Android, et Jake Wharton a fait une présentation sur Dagger.

Dans cette revue, je souhaite partager mes impressions sur la conférence et les détails de ces rapports.

J'ai beaucoup entendu parler du droidcon de Londres, mais jusqu'à présent je n'ai pas pu le visiter, car il sort beaucoup plus cher que, par exemple, le droidcon de Berlin, sans parler des conférences de Moscou. Dans le même temps, le niveau des conférences russes, telles que droidcon, Mobius, AppsConf, a considérablement augmenté ces dernières années, et je voulais comparer l'atmosphère, le niveau d'organisation et les rapports avec des homologues étrangers.

Mais tout d'abord.


Billets


Si vous achetez un billet à l'avance, vous pouvez le prendre pour 230 livres + TVA. Le prix final était d'environ 700 livres, TVA incluse. C'est assez cher par rapport aux billets pour les conférences russes, mais en moyenne c'est un prix adéquat pour l'Europe. Un vol coûtera environ 30 mille roubles, mais il est possible d'économiser de l'argent, car Victory y vole, et vous pouvez acheter un billet pour environ 6000 roubles dans un sens.


Logement


Nous avons vécu à 15 minutes à pied du lieu. L'hôtel est moyen, environ 150 livres par jour. En fait, si vous n'êtes pas trop exigeant, vous pouvez vivre dans une auberge du centre-ville pour 20 livres par jour.




Organisation

En termes d'organisation, la conférence était à un niveau assez élevé. J'ai aimé le site lui-même: une salle spacieuse pour la communication et la détente morale, un public confortable dans lequel les rapports ont été lus. Dans le hall, il y avait de nombreux stands de différentes sociétés où vous pouviez prendre une paire de stylos et de T-shirts. Le soir du premier jour, les organisateurs ont fait la fête. Il y avait des boissons gratuites et de la musique, mais nous sommes allés nous promener dans Londres.






Rapports

Le calendrier, à mon avis, était très bien établi, car à tout moment il y avait des rapports intéressants. De plus, des ateliers étaient constamment organisés.


Mais à partir du niveau des rapports, je m'attendais à plus. Beaucoup d'entre eux étaient sans aucun composant pratique, par exemple, juste une description de certaines API ou fonctionnalités. Le niveau des rapports lors des conférences de Moscou n'est au moins pas inférieur. Il y a eu plusieurs performances assez fortes et pertinentes. Ensuite, j'écrirai sur ceux qui m'ont paru les plus intéressants.


En savoir plus sur les rapports

Keynote - Trash Talk: L'évolution de la collecte des ordures sur Android
Chet Haase et Romain Guy, Google
La conférence a commencé par un très bon rapport sur le modèle de mémoire sous Android. Les gars ont expliqué comment cela avait changé d'une version à l'autre, pour quelles raisons cela s'était produit. Je ne dévoilerai pas les détails ici, mais je recommande de regarder la vidéo .

Modularisation - À quel point cela peut-il être difficile?
Elin Nilsson, Spotify
Pas tout à fait technique, mais plus motivant, mais à partir de ce rapport non moins intéressant. Elin a parlé des raisons qui les ont amenés à penser à diviser l'application monolithique en modules, à quel point elle était difficile et ce qui en est résulté en termes de quantité de code, de processus et de vitesse de construction. Lien vers le rapport .



Redux sur Android
Nish Tahir, WillowTree
Je ne peux pas dire que ce rapport m'a en quelque sorte ouvert les yeux sur Redux, mais, à mon avis, l'auteur a bien révélé l'essence de cette décision, a parlé des problèmes et de la pertinence de choisir Redux comme modèle architectural principal et dans quels cas elle est justifiée. Lien de rapport



Liaison de données moderne
Yigit Boyar et Jose Alcerreca, Google
Il était intéressant d'écouter un rapport sur les outils de Google de la bouche des développeurs eux-mêmes. En principe, ils n'ont rien dit de nouveau, le désir d'utiliser Data Binding n'est pas non plus apparu, mais merci pour la tentative. Lien de rapport

Plongez au cœur du plugin Android Gradle
John Rodriguez, Square Cash
Ce rapport était l'un des derniers de la conférence, et je n'étais pas prêt à percevoir des informations intéressantes et informatives, mais John est sorti et a fait un bon rapport plutôt hardcore sur les nuances intéressantes d'Android Gradle Plugin. Je le recommande également pour la visualisation .

Aider Dagger à vous aider
Jake Wharton, Google
Un bon rapport est venu de Jack Wharton. Ensemble avec Square, ils ont créé plusieurs bibliothèques pratiques à utiliser avec Dagger qui résolvent un certain nombre de problèmes de développeurs.

Premièrement, une grande attention est désormais portée au problème de la vitesse de construction. Cela est particulièrement vrai pour Dagger et ButterKnife car ils utilisent le processeur d'annotation et kapt. Square a présenté une solution dans laquelle les implémentations Dagger et ButterKnife travaillent sur la réflexion plutôt que sur la génération de code. Cela réduit légèrement la vitesse de l'application d'exécution, mais cela fait gagner du temps sur la compilation, et dans le cadre des versions de développement, cela est tout à fait justifié, car pour les derniers modèles Pixel et Samsung, ce travail est à peine perceptible.


Voici à quoi ressemblent les implémentations de Binder dans la version ButterKnife avec réflexion
@NonNull @UiThread public static Unbinder bind(@NonNull Object target, @NonNull View source) { List<Unbinder> unbinders = new ArrayList<>(); Class<?> targetClass = target.getClass(); if ((targetClass.getModifiers() & PRIVATE) != 0) { throw new IllegalArgumentException(targetClass.getName() + " must not be private."); } while (true) { for (Field field : targetClass.getDeclaredFields()) { int unbinderStartingSize = unbinders.size(); Unbinder unbinder; unbinder = parseBindView(target, field, source); if (unbinder != null) unbinders.add(unbinder); unbinder = parseBindViews(target, field, source); if (unbinder != null) unbinders.add(unbinder); unbinder = parseBindDrawable(target, field, source); if (unbinder != null) unbinders.add(unbinder); unbinder = parseBindString(target, field, source); if (unbinder != null) unbinders.add(unbinder); ... } for (Method method : targetClass.getDeclaredMethods()) { Unbinder unbinder; unbinder = parseOnCheckedChanged(target, method, source); if (unbinder != null) unbinders.add(unbinder); unbinder = parseOnClick(target, method, source); if (unbinder != null) unbinders.add(unbinder); ... } targetClass = targetClass.getSuperclass(); } return new CompositeUnbinder(unbinders); } 

La bibliothèque de ButterKnife se trouve sur ce lien. La version pour Dagger est ici .


Deuxièmement, il devient parfois nécessaire d'injecter des dépendances dans des vues personnalisées déclarées en XML. Auparavant, vous deviez les injecter via des méthodes définies et les lancer à travers des classes de l'extérieur, par exemple, dans un présentateur, lorsqu'il s'attache à une vue. Il existe maintenant un moyen pratique pour cela: les dépendances peuvent être lancées via le constructeur immédiatement après les paramètres requis, et le LayoutInfater personnalisé peut créer une vue avec ces constructeurs complexes.


A quoi cela ressemble dans le code:


MainActivity.java
 public final class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); MainComponent component = DaggerMainActivity_MainComponent.create(); InflationInjectFactory factory = component.getInjectFactory(); getLayoutInflater().setFactory(factory); setContentView(R.layout.main_activity); GalleryPresenter presenter = component.getGalleryPresenter(); GalleryView view = findViewById(R.id.gallery); presenter.attach(view); } @Component(modules = ViewModule.class) interface MainComponent { InflationInjectFactory getInjectFactory(); GalleryPresenter getGalleryPresenter(); } } 

GalleryView est écrit en xml.


GalleryView
 public final class GalleryView extends LinearLayout { private final ViewUpdater mViewUpdater; @InflationInject public GalleryView(@Assisted Context context, @Assisted AttributeSet attrs, ViewUpdater viewUpdater) { super(context, attrs); mViewUpdater = viewUpdater; } } 

Troisièmement, Square a abordé à sa manière le problème résolu par AutoValue, à savoir la création d'usines pour les classes avec des constructeurs lourds. Seule cette solution est intégrée au maximum dans la logique Dagger.


Exemple d'utilisation:


UserPresenter.java
 public final class UserPresenter { private final LoadUserInteractor mLoadUserInteractor; private final String mUserId; @AssistedInject UserPresenter(@Assisted LoadUserInteractor loadUserInteractor, @Exclamation String userid) { mLoadUserInteractor = loadUserInteractor; mUserId = userid; } @AssistedInject.Factory public interface Factory { UserPresenter create(String greeting); } ... } 

UserActivity.java
 public final class UserActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_view); UserPresenter.Factory factory = DaggerUserActivity_ UserComponent.create().getUserPresenterFctory(); UserPresenter presenter = factory.create(getIntent().getStringExtra("user_id")); presenter.attach(); ... } @Component(modules = UserModule.class) interface UserComponent { UserPresenter.Factory getUserPresenterFctory(); } } 

J'ai aimé la facilité de mise en œuvre de ces solutions d'actualité. Conseillez également de voir .


Sans aucun doute, j’ai appris quelque chose d’intéressant grâce aux rapports de la conférence, j’ai discuté avec des collègues de différentes entreprises, ce qui est un gros plus d’une conférence internationale, et cela vaut la peine de les consulter pour faire du réseautage. Un bonus cette fois était une visite à Londres. Si nous parlons de rapports, il est plus facile de les regarder en ligne ou d'assister à l'une des nombreuses conférences russes.

Source: https://habr.com/ru/post/fr428562/


All Articles