Tinder résout les problèmes des applications de rencontres avec les composants d'architecture Android
Restez organisé à l'aide des collections
Enregistrez et classez les contenus selon vos préférences.
Tinder est l'application la plus populaire au monde pour rencontrer de nouvelles personnes. Connu pour avoir changé la façon dont les gens se rencontrent et sortent ensemble, il permet aux utilisateurs de balayer vers la droite pour se connecter et discuter avec d'autres personnes. Tinder génère plus de 26 millions de matchs par jour, et plus de 20 milliards de matchs ont été créés depuis son lancement en 2012.
L'entreprise devait faire évoluer rapidement son application en fonction de la demande des utilisateurs, mais l'implémentation de sa base de données datait de ses débuts, ce qui rendait son expansion de plus en plus compliquée.
Ils avaient également une architecture axée sur les vues pour réduire la complexité du cycle de vie, mais ils devaient savoir quels événements du cycle de vie étaient spécifiques à une activité. Ils manquaient d'un framework cohérent pour gérer des tâches telles que le marshalling des objets Cursor dans des objets de domaine, la migration de bases de données ou l'exécution cohérente de requêtes.
Ce qu'ils ont fait
Figure 1 : Photo d'un photographe sur Tinder
Tinder s'est tourné vers les composants d'architecture Android pour trouver des solutions permettant de mettre à niveau son code. Ils ont utilisé Lifecycle pour permettre à un View d'observer le cycle de vie de son activité hôte, et LifecycleObserver pour faciliter une architecture de plug-in décentralisée et éviter le gonflement des objets Presenter, Activity et View. La bibliothèque de persistance Room fournissait une méthode clé en main pour définir, gérer et interroger leur base de données locale.
L'équipe de développement de Tinder a pu implémenter l'architecture de plug-ins LifecycleObserver en seulement deux semaines, tandis que l'implémentation de Room pour son SDK Ads interne n'a pris que deux jours.
"Nous n'avons plus eu à consacrer beaucoup de temps à la gestion du cycle de vie des activités dans les plug-ins ou les vues", explique Andy Lawton, responsable Android chez Tinder.
"La conception de Room est bien pensée et facilite l'implémentation de notre couche de persistance. L'utilisation de Room pour le SDK Ads interne nous a probablement fait gagner une semaine de développement initial."
Résultats
Tinder a été tellement satisfait des résultats obtenus avec le SDK Ads qu'il migre l'intégralité de sa couche de base de données vers Room. Les tests étaient faciles et la protection de Room contre l'oubli de désenregistrement d'un élément a réduit les fuites de mémoire.
Les composants d'architecture Android contribuent également à réduire l'empreinte mémoire.
"Les composants de l'architecture Android ont fourni une solution à de nombreux problèmes rencontrés par les développeurs à différentes échelles", explique Lawton.
"Grâce à l'utilisation de composants compatibles avec le cycle de vie, Tinder a réussi à améliorer la productivité des développeurs, la testabilité et la modularité, tout en favorisant une architecture axée sur les vues. Room élimine le besoin d'autres solutions pour gérer SQLite, et transforme la gestion et l'interrogation de bases de données en un exercice de configuration."
Métrique
Plus de 500 lignes de code supprimées de MainActivity via
LifecycleObserver /
architecture de plug-in
Le contenu et les exemples de code de cette page sont soumis aux licences décrites dans la Licence de contenu. Java et OpenJDK sont des marques ou des marques déposées d'Oracle et/ou de ses sociétés affiliées.
Dernière mise à jour le 2018/05/03 (UTC).
[[["Facile à comprendre","easyToUnderstand","thumb-up"],["J'ai pu résoudre mon problème","solvedMyProblem","thumb-up"],["Autre","otherUp","thumb-up"]],[["Il n'y a pas l'information dont j'ai besoin","missingTheInformationINeed","thumb-down"],["Trop compliqué/Trop d'étapes","tooComplicatedTooManySteps","thumb-down"],["Obsolète","outOfDate","thumb-down"],["Problème de traduction","translationIssue","thumb-down"],["Mauvais exemple/Erreur de code","samplesCodeIssue","thumb-down"],["Autre","otherDown","thumb-down"]],["Dernière mise à jour le 2018/05/03 (UTC)."],[],[],null,["# Tinder solves dating-app pain points with Android Architecture Components\n\n[Tinder](https://tinder.com) is the world's most popular app for\nmeeting new people. Known for changing how people meet and date, it empowers\nusers to swipe right to connect and chat with others. Tinder sparks over 26 million\nmatches a day, with more than 20 billion matches made since their launch in\n2012.\n\nThe company needed to scale up the\n[app](https://play.google.com/store/apps/details?id=com.tinder)\nquickly, based on user demand, but their database implementation was left over\nfrom their early days, making it increasingly more complicated to expand upon.\nThey also had a view-heavy architecture to reduce lifecycle complexities, but\nneeded to know which lifecycle events were specific to an activity. They lacked\na consistent framework for handling tasks such as marshalling\n[`Cursor`](/reference/android/database/Cursor) objects into domain objects, making\ndatabase migrations, or consistently performing queries.\n\nWhat they did\n-------------\n\n**Figure 1:** A photo of a photographer on Tinder\n\nTinder turned to [Android Architecture\nComponents](/topic/libraries/architecture) for solutions for upgrading their\ncode. They used [`Lifecycle`](/reference/androidx/lifecycle/Lifecycle) to\nlet a [`View`](/reference/android/view/View) observe its host activity's\nlifecycle, and they used [`LifecycleObserver`](/reference/androidx/lifecycle/LifecycleObserver)\nto facilitate a decentralized plugin architecture and to prevent bloat in\n[`Presenter`](/reference/androidx/leanback/widget/Presenter),\n[`Activity`](/reference/android/app/Activity), and [`View`](/reference/android/view/View)\nobjects. The [Room persistence library](/topic/libraries/architecture/room)\nprovided a turnkey method for defining, managing, and querying their local\ndatabase.\n\nThe Tinder development team was able to implement the\n[`LifecycleObserver`](/reference/androidx/lifecycle/LifecycleObserver) and\nplugin architecture in only two weeks, while seamlessly implementing Room for\ntheir internal Ads SDK took just two days.\n\u003e \"We no longer had to invest significant time managing the Activity Lifecycle\n\u003e inside of plugins or views,\" says Andy Lawton, Head of Android at Tinder.\n\u003e \"Room's design is well- thought-out and makes our persistence layer easy to\n\u003e implement. Using Room for the internal Ads SDK probably saved a week of time\n\u003e in upfront development.\"\n\nResults\n-------\n\nTinder was so pleased with their results with their Ads SDK that they're\nmigrating their entire database layer to Room. Testing was easy, and Room's\nprotection against forgetting to unregister something reduced memory leaks.\nAndroid Architecture Components is also helping to produce smaller memory\nfootprints.\n\u003e \"Android Architecture Components has provided a prescription for solving many\n\u003e of the pain points that developers face at all different scales,\" Lawton says.\n\u003e \"Through the use of lifecycle-aware components, Tinder has managed to improve\n\u003e developer productivity, testability, and modularity, while being conducive to\n\u003e a view-first architecture. Room eliminates the need for other solutions for\n\u003e managing SQLite, and turns database management and querying into an exercise\n\u003e in configuration.\"\n\nMetric\n------\n\n**500+** lines of code removed from `MainActivity` via\n[`LifecycleObserver`](/reference/androidx/lifecycle/LifecycleObserver) /\nplugin architecture\n\nGet started\n-----------\n\nAndroid Architecture Components is open to all developers as part of Android\nJetpack. [Get started with Android Architecture\nComponents](/topic/libraries/architecture)."]]