Maison >interface Web >Questions et réponses frontales >Questions d'entretien Android : quatre éléments principaux

Questions d'entretien Android : quatre éléments principaux

藏色散人
藏色散人avant
2020-07-31 14:27:084632parcourir

Recommandé : "Collection de questions d'entretien Android 2020 [Collection] "

Questions d'entretien Android (quatre composants principaux)

Fenêtre, processus , fil de discussion

Questions d'entretien Android (stockage de données, affichage)

Activité


Q : Parlez-moi de le cycle de vie de l’Activité ?


Q : Quelle est la différence entre onStart() et onResume()/onPause() et onStop() ?

Qu'elle soit au premier plan, visible par l'utilisateur ou non


Q : Quelles méthodes seront rappelées lorsque l'activité A démarre une autre activité B ? Et si l’activité B était complètement transparente ? Que se passe-t-il si une boîte de dialogue est lancée ?

A rappellera onPause()>>onStop(), transparent n'appellera pas onStop() et la boîte de dialogue n'appellera pas onPause() et onStop()


Q : Vous parlez de la méthode onSaveInstanceState() ? Quand sera-t-il appelé ?

Cette méthode sera appelée lorsque l'activité est accidentellement détruite puis recréée. Par exemple, le basculement entre les écrans horizontaux et verticaux entraînera la recréation de l'activité. La méthode onSaveInstanceState() est appelée avant. onStop() pour enregistrer l'état de l'activité actuelle. Lorsque l'activité est recréée, onRestoreInstanceState() sera appelé pour restaurer l'état de l'activité onRestoreInstanceState() est appelé avant onStart().


Q : Quelle est la différence entre onSaveInstanceState() et onPause() ?

Il n'y a pas d'ordre fixe dans lequel les deux sont exécutés.

Le moment du déclenchement de la méthode onsavedinstance (Bundle savinginstancestate). Le scénario typique consiste à appuyer sur le bouton d'accueil ou à changer d'activité. Cependant, si vous appuyez sur le bouton de retour pour quitter le programme, cela peut être détruit. La méthode ne sera pas appelée, adaptée à la sauvegarde de certaines données non persistantes (c'est-à-dire les données qui doivent être stockées pendant l'exécution du programme).

Onpause() doit être appelé qu'il s'agisse de détruire ou de quitter le programme. Il convient à la sauvegarde de données persistantes. Cependant, Android lui-même ne fournit pas de paramètre bundle pour cette méthode, nous pouvons donc choisir de créer un. variable statique ou Il fournit une préférence partagée en tant que support de données.

Q : Comment éviter la reconstruction de l'activité lorsque la configuration change ?

Lors de l'enregistrement de chaque activité dans le fichier manifeste, écrivez

android:configChanges="XXX"

Par exemple, basculer entre les écrans horizontaux et verticaux : android:configChanges=" orientation"

Q : Comment une activité de faible priorité peut-elle être restaurée à son état d'avant destruction après avoir été recyclée en raison d'une mémoire insuffisante ?

1. Lorsque l'application est en arrière-plan et est recyclée par le système, le processus de l'application est interrompu, l'activité est également recyclée et les piles de tâches et d'activités de l'application ainsi que les intentions et données correspondantes seront enregistrées par le système. Lorsque l'application revient au premier plan, le système restaure les piles de tâches et d'activités ainsi que les intentions et les données correspondantes.
2. Ne stockez pas de données dans la classe Application et la classe singleton globale, car cela empêcherait l'application de restaurer son état correctement. Les données temporaires pendant l'exécution doivent être stockées dans SharedPreference, des fichiers temporaires ou des bases de données
3 Le mécanisme d'intention fourni par le système doit être utilisé pour transférer des données entre les activités.

Q : Parlez-nous des quatre modes de démarrage de l'activité ? (Parfois une question pratique se posera pour analyser la situation de l'Activité dans la pile retour)

https://blog.csdn.net/mountain_hua/article/details/81481242


Q : Parlons de la différence entre singleTop et singleTask et des scénarios d'application

Réutilisation du haut de la pile : résolvez le problème de l'ouverture répétée de l'activité.

Réutilisation dans la pile : lorsqu'une pile de tâches appelle l'activité d'un autre programme, comme suit :


Q : onNewIntent() Heure d'appel ?

En modes singleTop et singleTask, il existe une activité correspondante et la fonction onNewIntent() de l'activité sera appelée.


Q : Quels sont les bits d'indicateur du mode de démarrage d'activité ?

Intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//Spécifiez le mode singleTask, qui a le même effet que de spécifier android:launchMode "singleTask" dans AndroidManifest.xml

Intent.addFlags (Intent .FLAG_ACTIVITY_SINGLE_TOP);
//Spécifiez le mode singleTop, qui a le même effet que de spécifier android:launchMode "singleTop" dans AndroidManifest.xml

Intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
//A ceci Lorsque l'activité marquée est démarrée, elle se trouve dans la même pile de tâches, donc l'activité au-dessus d'elle sera retirée de la pile. Elle apparaîtra généralement avec le mode singleTask

Intent.addFlags. (Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
// Les activités avec cet indicateur n'apparaîtront pas dans la liste historique des activités. Cela équivaut à spécifier android : exclureFromRecents="true"
dans AndroidManifest.xml La priorité du bit d'indicateur. est supérieure à la priorité spécifiée dans AndroidManifest


Q : Comment démarrer l'activité d'autres applications ?

SingleTask et taskAfiinity sont utilisés ensemble


Q : Processus de démarrage de l'activité ?

https://www.jianshu.com/p/9ecea420eb52

Fragment


Q : Vous parlez du cycle de vie de Fragment ?

La figure suivante décrit très bien la relation entre le cycle de vie d'un fragment et d'une activité

Q : Quelles sont les similitudes et les différences entre l'activité et le fragment ?

1. Commençons par les bases ---> Cycle de vie

L'activité a 7 cycles de vie : onCreate(); ; onDestroy(); onRestart();

Fragment a 11 cycles de vie : onAttach(); onCreateView(); (); onDestroyView(); onDestroy(); onDetach();

Donc Fragment est plus flexible que Activity car il y a plus de cycles de vie et vous avez plus de contrôle.

2. En termes de flexibilité

L'activité est l'un des quatre composants majeurs. C'est le support de chaque page. L'affichage du fragment dépend de l'activité. de Fragment Vous pouvez le découvrir au cours du cycle.

Fragment est un petit fragment un par un

1) Par rapport à l'activité, il est plus flexible. Il peut être écrit directement dans le fichier XML ou ajouté dynamiquement dans l'activité

.

2) Vous pouvez utiliser show()/hide() ou replace() pour changer de fragment à tout moment, et il n'y aura aucun effet évident lors du changement, et l'expérience utilisateur sera meilleure bien que l'activité puisse également être modifiée ; , mais le passage d'une activité à l'autre aura des changements de page évidents ou d'autres effets, et le changement d'une petite partie du contenu ne donnera pas une bonne impression à l'utilisateur.

Q : Quelle est la relation entre l'activité et Fragment ?

L'affichage du Fragment dépend de l'activité, qui peut être comprise à partir du cycle de vie du Fragment.


Q : Quand envisagerez-vous d'utiliser Fragment ?

Similaire à la barre de menu sous WeChat, ainsi qu'à l'adaptation des téléphones mobiles et des tablettes, etc.

Service


Q : Allons parler du cycle de vie du Service ?

https://www.cnblogs.com/huihuizhang/p/7623760.html


Q : Quelles sont les deux méthodes de démarrage pour Service? Quelle est la différence ?

start est démarré directement et lié est lié à l'activité en cours.


Q : Après qu'une activité démarre un service, quelle méthode sera rappelée lorsqu'elle sera liée ? Que dois-je faire pour rappeler la méthode destroy() de Service à ce moment-là ?

Si un service est démarré et lié à nouveau, le service s'exécutera toujours en arrière-plan. Et quelle que soit la manière dont il est appelé, onCreate ne sera toujours appelé qu'une seule fois, correspondant au nombre de fois que startService est appelé, onStart de Service sera appelé autant de fois. L’appel de unbindService n’arrêtera pas le service, mais doit appeler stopService ou stopSelf du service pour arrêter le service.


Q : Comment le service communique-t-il avec l'activité ?

  1. Activity appelle la méthode bindService (Intent service, ServiceConnection conn, int flags) pour obtenir une référence à l'objet Service, afin que l'Activity puisse appeler directement la méthode dans le Service si nous le souhaitons. notifiez l'activité de manière proactive, nous pouvons utiliser la méthode de rappel
  2. Service pour envoyer des messages à l'activité. Vous pouvez utiliser la diffusion. Bien sûr, l'activité doit enregistrer le récepteur correspondant. Par exemple, si un service souhaite envoyer le même message à plusieurs activités, il est préférable d'utiliser cette méthode

Q : Quels services système avez-vous utilisés ?

https://blog.csdn.net/geyunfei_/article/details/78851024


Q : Un traitement fastidieux peut-il être effectué en service ? Que peut-on faire si nécessaire ?

Le service s'exécute dans le thread principal. Généralement, les opérations fastidieuses ne peuvent pas être effectuées dans le service. Si nécessaire, vous pouvez utiliser le service distant pour démarrer un nouveau processus.


Q : Comment AlarmManager peut-il implémenter la synchronisation ?

AlarmManager donne accès aux services d'alarme du système. Ceux-ci vous permettent d'exécuter l'application à un moment donné dans le futur. Lorsqu'une alerte retentit, le système diffuse l'intention enregistrée et lance automatiquement l'application cible si elle n'est pas déjà en cours d'exécution. Les alarmes enregistrées sont conservées pendant que l'appareil est en veille (avec la possibilité de le réveiller en cas de dysfonctionnement de l'appareil pendant cette période), mais sont effacées si l'appareil est éteint et redémarré. Le gestionnaire d'alarmes maintient un wakelock du processeur tant que la méthode onReceive() du récepteur d'alarme est en cours d'exécution. Cela garantit que le téléphone ne se mettra pas en veille tant que vous n'aurez pas fini de traiter la diffusion. Une fois onReceive() renvoyé, le gestionnaire d'alarmes libérera ce wakelock. Cela signifie que, dans certains cas, le téléphone se mettra en veille dès que la méthode onReceive() sera terminée. Si votre récepteur d'alerte appelle Context.startService(), le téléphone peut se mettre en veille avant de démarrer le service demandé. Pour éviter que cela ne se produise, votre BroadcastReceiver et votre service devront mettre en œuvre une politique de wakelock distincte pour garantir que le téléphone continue de fonctionner jusqu'à ce que le service soit disponible.


Q : Quel est le service de réception ? En quoi est-ce différent des services ordinaires ? Comment démarrer un service de réception ?

Le service de premier plan est un service visible par les utilisateurs, qui peut être créé sous forme de notifications


Q : Connaissez-vous ActivityManagerService et quel rôle il joue ?

ActivityManagerService (ci-après dénommé AMS) est le service de base d'Android. Il est principalement responsable du démarrage, de la commutation, de la planification des quatre composants principaux du système ainsi que de la gestion et de la planification des processus d'application. les responsabilités sont les mêmes que celles des processus dans le système d'exploitation. Les modules de gestion et de planification sont similaires, c'est donc très important sous Android


Q : Comment s'assurer que le Service n'est pas tué ? Dans la méthode

onStartCommand, retournez <code><strong>START_STICKY</strong>START_STICKY

StartCommand() dans

plusieurs constantes :
  • START_STICKY
    onStartCommand() Le système recrée le service et appelle la méthode intent, mais ne transmet pas le dernier intent passé, juste un intent vide. À moins qu'il n'y ait des intent à adopter, alors ces
  • seront adoptés. Ceci convient aux services tels que les joueurs, qui n'ont pas besoin d'exécuter des commandes. Ils doivent seulement s'exécuter seuls et attendre les tâches.
  • START_NOT_STICKY
    intent Le système ne recrée pas le service sauf s'il y a un
  • à transmettre. Il s’agit de l’option la plus sûre et empêche les services de s’exécuter lorsque cela n’est pas nécessaire.
  • START_REDELIVER_INTENT
    onStartCommand() Le système recrée le service et appelle la méthode intent, en transmettant le dernier intent passé. Les
  • restants qui doivent être adoptés seront adoptés dans l'ordre. Cela convient aux services tels que les téléchargements, qui reprennent immédiatement et s'exécutent de manière agressive.

Augmenter la priorité du service

Les services de premier plan sont considérés comme étant utilisés pour les services en cours d'exécution connus et ne seront pas supprimés en premier lorsque le système doit libérer de la mémoire. le processus.

Envoyez une diffusion dans onDestory() pour vous ouvrir

ondestory()méthode service+broadcast, c'est-à-dire que lorsque le service appelle

, il envoie une diffusion personnalisée. Lorsque la diffusion est reçue, redémarrez le service. Bien entendu, cette solution est réalisable en théorie, et il est également possible d’expérimenter les résultats. Mais dans certains cas, la diffusion envoyée est classée plus bas dans la file d'attente des messages, et il est possible que le service soit détruit avant de recevoir la diffusion (juste une supposition). Ainsi, pour que ce mécanisme fonctionne parfaitement, vous pouvez démarrer deux services, se surveiller mutuellement et se démarrer mutuellement. Le service A écoute la diffusion de B pour démarrer B, et le service B écoute la diffusion de A pour démarrer A. Après expérimentations, cette solution est réalisable.

Récepteur de diffusion


Q : Quels sont les deux formulaires d'inscription pour la diffusion ? Quelle est la différence ?

Il existe deux méthodes pour enregistrer les récepteurs de diffusion, à savoir l'enregistrement dynamique dans le programme et l'enregistrement statique dans le fichier AndroidManifest.

La caractéristique du récepteur de diffusion enregistré dynamiquement est que lorsque l'activité utilisée pour l'enregistrement est désactivée, la diffusion sera invalide. L'enregistrement statique n'a pas besoin de se soucier de savoir si le récepteur de diffusion est éteint. Tant que l'appareil est allumé, le récepteur de diffusion est également allumé. C'est-à-dire que même si l'application elle-même n'est pas démarrée, la diffusion souscrite par l'application l'affectera lorsqu'elle sera déclenchée.

ContentProvider


Q : Que savez-vous de ContentProvider ?

(1) La plate-forme Android fournit ContentProvider pour fournir l'ensemble de données spécifié d'une application à d'autres applications. D'autres applications peuvent obtenir ou stocker des données de ce fournisseur de contenu via la classe ContentResolver.

(2) Les fournisseurs de contenu ne sont nécessaires que si les données doivent être partagées entre plusieurs applications. Par exemple, les données du carnet d'adresses sont utilisées par plusieurs applications et doivent être stockées dans un fournisseur de contenu. Son avantage est d’unifier la manière dont les données sont accessibles.

(3) ContentProvider implémente le partage de données. ContentProvider est utilisé pour enregistrer et obtenir des données et les rendre visibles à toutes les applications. C’est le seul moyen de partager des données entre différentes applications car Android ne fournit pas de zone de stockage commune à laquelle toutes les applications peuvent accéder.

(4) Les développeurs n'utiliseront pas directement les objets de la classe ContentProvider. La plupart d'entre eux implémentent des opérations sur ContentProvider via des objets ContentResolver.

(5) ContentProvider utilise l'URI pour identifier de manière unique son ensemble de données. L'URI ici est préfixé par content://, indiquant que les données sont gérées par ContentProvider.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer