À l'extérieur de la fenêtre, il y a du printemps humide et de la neige fondante, mais à l'automne Mobius au stand HeadHunter, il faisait très chaud. Nous avons publié la
première partie du quiz , aujourd'hui nous publions la seconde, afin que vous puissiez vous étirer la cervelle avant les futures conférences.
C'est parti!

C'est parti!
Question 1
ExplicationsEn général, Android a été initialement développé par Android Inc. Les créateurs ont prévu qu'il serait utilisé pour créer des «caméras intelligentes». En 2005, Google a acheté Android Inc et a changé le vecteur d'application de la plateforme vers les appareils mobiles.
"Exactement la même plate-forme et le même système d'exploitation que nous avons créés pour les caméras - sont devenus Android pour les téléphones mobiles", a déclaré le co-fondateur d'Android Andy Rubin.
Question 2
ExplicationsADB (Android Debug Bridge) est un outil en ligne de commande qui exécute des commandes sur des appareils Android. Il s'agit d'un programme client-serveur composé de trois composants:
- un client qui vous permet d'envoyer des commandes;
- un démon exécutant des commandes sur un appareil;
- Un serveur gérant les communications entre le client et le démon.
Question 3
ExplicationsAPK (package Android) est un format de fichier exécutable d'archive pour Android. Fourni avec aapt (Android Asset Packaging Tool). Conditionnellement, le travail de cet utilitaire peut être divisé en deux étapes:
- Compilation. A ce stade, des ressources sont en cours de préparation: la classe R est générée, les ressources XML sont traduites au format binaire, traitement PNG, etc.
- Emballage (liaison). Tous les fichiers intermédiaires créés au stade de la compilation sont regroupés dans l'APK.
Le processus de création d'une application Android est décrit dans la documentation .
Question 4
ExplicationsAgera est un cadre de programmation réactif pour Android. Non inclus dans JetPack.
Jetpack - un ensemble de bibliothèques qui simplifient le développement de nouvelles applications pour Android.
Slices - Modèles d'interface utilisateur pour l'intégration dans d'autres applications.
Android KTX est un ensemble de fonctionnalités d'extension Kotlin qui simplifient le développement Android.
La liaison de données est une technologie avec laquelle nous pouvons lier automatiquement des données directement dans du code XML.

Question 5
ExplicationsLa question était à l'horizon des langages de programmation.
L'option `hh = 1` se trouve en Python,` def hh = 1` - dans Groovy, et la dernière option - en Java, dans laquelle nous devons spécifier le type de données.
Question 6
ExplicationsNormal - cette catégorie inclut des autorisations qui ne nécessitent pas l'accès à des données utilisateur confidentielles ou n'affectent pas le fonctionnement d'autres applications. Le système accorde automatiquement ces autorisations à l'application lors de l'installation et les utilisateurs ne peuvent pas les révoquer.
Signature - sont automatiquement fournis à l'application par le système lors de l'installation, ainsi que les autorisations normales. Cependant, la différence est que toutes les applications ne peuvent pas obtenir ces autorisations. Pour ce faire, il doit être signé avec le même certificat que l'application qui a annoncé cette autorisation.
Dangereux - cette catégorie comprend les autorisations qui nécessitent l'accès à des données utilisateur confidentielles ou peuvent affecter le fonctionnement d'autres applications.
Spécial est SYSTEM_ALERT_WINDOW et WRITE_SETTINGS.
La documentation
Question 7
La réponse Principle Of Least Astonishment
ExplicationsOh, ces cinq lettres.
Principe de responsabilité unique - une classe doit faire une chose.
O Principe de fermeture - les entités logicielles doivent être ouvertes pour l'expansion, mais fermées pour le changement.
Principe de substitution L iskov (principe de substitution Barbara Liskov) - le comportement de la classe héritière ne doit pas contredire le comportement spécifié par la classe parent.
Principe de ségrégation d'interface - les entités logicielles ne doivent pas dépendre de méthodes qu'elles n'utilisent pas
Principe d'inversion de la dépendance - Les abstractions ne devraient pas dépendre des détails. Les détails doivent dépendre des abstractions.
Mais «Principe du moindre étonnement» n'est pas inclus dans SOLID . Cette règle stipule que si la finalité d'un élément n'est pas claire, son comportement doit être attendu de l'utilisateur (principe de la moindre surprise).
Question 8
ExplicationsÀ propos de la liaison de données et des tranches, nous avons parlé un peu plus haut. Toast et Snackbar sont des éléments de notification aux utilisateurs dans les applications Android et ne peuvent pas être intégrés dans d'autres applications. Bien que Toast puisse s'afficher après et après avoir réduit l'application, contrairement à Slices, il ne peut être intégré nulle part.
Question 9
ExplicationsLa spécification du fichier dex limite le nombre total de méthodes pouvant être référencées à 65 536.
Dans les versions avec Dalvik à bord (époque pré-API 21), pour contourner cette limitation, il est nécessaire de connecter la bibliothèque multidex, qui devient une partie du fichier dex principal et contrôle l'accès au reste.
ART, à son tour, prend en charge le chargement de nombreux fichiers dex hors de la boîte. Lors de l'installation de l'application, ART analyse les fichiers classesN.dex et les compile en un seul fichier .oat pour une initialisation plus poussée de l'application.
Multidex
Question 10
ExplicationsonPostCreate () - appelé après avoir appelé onStart () et onRestoreInstanceState ()
onPostResume () - appelé après avoir appelé onResume ()
onResumeFragments () est une version fragmentée de la méthode onResume (). Appelé à l'intérieur de onPostResume (), après que l'onResume () ait appelé les fragments.
Question 11
Explications9-patch est une image .png standard dans laquelle les bords 1px contiennent des informations de service interprétées par le sous-système graphique Android comme suit:
les bordures gauche et supérieure définissent la zone de contenu qui sera étirée.
les bordures droite et inférieure définissent la zone dans laquelle le contenu sera placé.
Question 12
ExplicationsZygote est l'un des composants clés de tout système Android. Il est responsable de l'initialisation, du démarrage des services système, du démarrage et de l'arrêt des applications utilisateur et de nombreuses autres tâches. Lors de l'initialisation, Zygote forme l'environnement d'exécution pour les applications Java (en chargeant toutes les classes Java du framework) et démarre les services système de haut niveau (WindowManager, ActivityManager, etc.), après quoi il se met en veille. Lors de la réception d'une demande de démarrage de l'application, Zygote se copie (fork) et lance l'application souhaitée au-dessus de la copie reçue de la machine virtuelle. Ce principe de fonctionnement vous permet de réduire la consommation de mémoire (Linux copie la mémoire de copie sur écriture pendant le fork) et accélère le démarrage de l'application (le fork du processus est beaucoup plus rapide que le démarrage d'une nouvelle machine virtuelle).
Question 13
ExplicationsLes niveaux de l'architecture Android ont été analysés dans le quiz précédent à la question 14.
Question 14
ExplicationsIl existe deux manières principales d'implémenter une machine virtuelle: la pile (Java, .Net CLR) et l' enregistrement (Lua VM, Dalvik VM). La principale différence entre les deux approches est le mécanisme utilisé pour écrire et recevoir les opérandes et les résultats d'exécution des commandes.
La pile VM utilise la pile pour stocker les opérandes. Les opérations reçoivent les données de la pile, les traitent et repoussent le résultat sur la pile selon la règle LIFO.
Register VM utilise des registres de processeur pour allouer des opérandes. Les instructions d'une telle machine virtuelle doivent contenir explicitement les adresses (registres) dans lesquelles les opérandes sont contenus.
En raison de cette différence, les instructions dans la machine virtuelle de registre sont plus rapides que les instructions similaires dans la machine virtuelle de pile, mais en moyenne, elles occupent plus de mémoire en spécifiant explicitement des opérandes.
Un autre avantage du registre VM est la possibilité de stocker la valeur calculée dans le registre, ce qui économise le temps nécessaire pour recalculer les expressions.
Raisons du choix d'une implémentation Dalvik VM comme machine virtuelle de registre ( vidéos ou diapositives (35.36)
Question 15
ExplicationsJNI - Interface native Java - offre la possibilité d'exécuter du code C / C ++ natif à partir de Java, et vice versa.
Pour appeler une fonction Java à partir du code C ++, vous devez décrire correctement sa signature. Supposons que nous voulons appeler une fonction:
boolean f(String s)
Ensuite, dans JNI, nous pouvons obtenir un lien vers celui-ci comme suit:
jmethodID myFunc = env->GetMethodID( activityClass, "myFunc", "(Ljava/lang/String;)Z");
Concernant les types dans la description de la signature: 'B' est utilisé pour l'octet, 'C' est char, 'I' est int.
Signature de type | Type Java |
---|
Z | booléen |
B | octet |
C | char |
S | court |
Je | int |
J | longue |
F | flotter |
D | double |
L classe entièrement qualifiée; | classe entièrement qualifiée |
[type | tapez [] |
(types-arg) type-ret | type de méthode |
( Source )
Il est curieux que le râteau avec «B» et «Z» soit apparemment si populaire que les quais Android indiquent clairement: «Rappelez-vous que« B »est octet et« Z »est booléen . »
Eh bien, nous nous souvenons)