


Analyse des questions et réponses d'entretien avancées sur Android
Recommandation : "Résumé des questions d'entretien Android 2020 [Collection] "
1. Optimisation des performances
1. analyse des performances
Les principales performances d'Android sont la vitesse de réponse et la vitesse de rafraîchissement de l'interface utilisateur.
Vous pouvez vous référer au blog : Introduction aux outils de réglage des performances du système Android
Tout d'abord, en termes de fonction chronophage, il existe un outil TraceView, qui est le travail qui vient avec androidsdk, utilisé pour mesurer les fonctions chronophages.
L'analyse de la disposition de l'interface utilisateur peut comporter deux parties. L'une est la visionneuse de hiérarchie. Vous pouvez voir le niveau de disposition de la vue ainsi que le temps d'actualisation et de chargement de chaque vue.
De cette façon, vous pouvez localiser rapidement la mise en page et la vue qui prennent le plus de temps.
Une autre option consiste à réduire le niveau de vues en personnalisant les vues.
2. Dans quelles circonstances les fuites de mémoire se produiront
Les fuites de mémoire sont un problème difficile.
Quand une fuite de mémoire se produit-elle ? La cause première des fuites de mémoire : les objets à longue durée de vie contenant des objets à courte durée de vie. Les objets éphémères ne peuvent pas être libérés à temps.
I. Les classes de collections statiques provoquent des fuites de mémoire
Principalement hashmap, Vector, etc. S'il s'agit de collections statiques et que ces collections ne sont pas définies dans le temps, elles contiendront toujours ces objets.
La méthode II.remove ne peut pas supprimer l'ensemble Objects.hash(firstName, lastName);
Après le test, une fois le hashcode modifié, il n'y a aucun moyen de le supprimer.
III.observateur Lorsque nous utilisons des auditeurs, nous ajoutons souventxxxlistener, mais lorsque nous n'en avons pas besoin, si nous oublions de supprimerxxxlistener, il est facile que la mémoire fuie.
La diffusion ne désenregistre pas le récepteur
IV. Divers liens de données ne sont pas fermés, fournisseur de contenu de base de données, io, sokect, etc. curseur
V. Classe interne :
La classe interne (classe interne anonyme) en java détiendra la référence forte this de la classe hôte.
Donc, s'il s'agit d'une opération de thread en arrière-plan telle que new Thread, lorsque le thread ne se termine pas, l'activité ne sera pas recyclée.
La référence contextuelle, TextView, etc. contiendra la référence contextuelle. S'il existe un dessin statique, la mémoire ne sera pas libérée.
VI. Singleton
Singleton est un objet statique global Lorsque vous détenez une classe A copiée, A ne peut pas être libéré et la mémoire fuit.
3. Comment éviter les exceptions MOO
Tout d'abord, qu'est-ce que le MOO ?
Lorsque le programme doit demander une "grande" mémoire, mais que la machine virtuelle ne peut pas la fournir à temps, même après l'exécution de l'opération GC
Cela lancera OutOfMemoryException, qui est OOM
Que diriez-vous du MOO d'Android ?
Afin de réduire l'impact d'une seule application sur l'ensemble du système, Android définit une limite de mémoire pour chaque application.
public void getMemoryLimited(Activity context) { ActivityManager activityManager =(ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE); System.out.println(activityManager.getMemoryClass()); System.out.println(activityManager.getLargeMemoryClass()); System.out.println(Runtime.getRuntime().maxMemory()/(1024*1024)); }
Mesure réelle du HTC M7, limite supérieure de 192M. 512 Mo Dans des circonstances normales, 192 Mo est la limite supérieure, mais en raison de circonstances particulières, Android autorise l'utilisation d'une plus grande RAM.
Comment éviter le MOO
Réduire l'utilisation des objets mémoire
I.ArrayMap/SparseArray au lieu de hashmap
II Évitez d'utiliser Enum dans Android
III. Réduire l'utilisation de la mémoire du bitmap
- inSampleSize : taux de mise à l'échelle Avant de charger l'image dans la mémoire, nous devons calculer un taux de mise à l'échelle approprié pour éviter le chargement inutile d'images volumineuses. .
- format de décodage : format de décodage, sélectionnez ARGB_8888/RBG_565/ARGB_4444/ALPHA_8, il y a de grandes différences.
IV. Réduisez la taille des images ressources. Pour les images trop volumineuses, pensez à les charger par sections
Réutilisation des objets mémoire
Réutilisation de la plupart des objets. . Ils utilisent tous la technologie des pools d’objets.
I.listview/gridview/recycleview contentview réutilisation
II.inBitmap attribut réutilisation des objets mémoire ARGB_8888/RBG_565/ARGB_4444/ALPHA_8
Cette méthode est utilisée dans un certain It est très utile dans certaines conditions, par exemple lorsque des milliers d'images doivent être chargées.
III. Évitez les nouveaux objets dans la méthode ondraw
IV.StringBuilder au lieu de +
4 Comment intercepter les exceptions non interceptées dans Android
09-10 10:20:00.477 4153-4153/com.joyfulmath.samples I/System.out: 192 09-10 10:20:00.477 4153-4153/com.joyfulmath.samples I/System.out: 512 09-10 10:20:00.477 4153-4153/com.joyfulmath.samples I/System.out: 192
<. 🎜>CrashHandler
La clé est d'implémenter Thread.UncaughtExceptionHandler puis de l'enregistrer dans la création de l'application. 5.Qu'est-ce que l'ANR ? Comment éviter et résoudre l'ANR (Important) ANR->L'application ne répond pasC'est-à-dire qu'il n'y a pas de réponse dans le délai spécifié. Trois types : 1). KeyDispatchTimeout (5 secondes) --Le type principal d'événement de touche ou tactile ne répond pas dans un délai spécifique 2). (10 secondes) --BroadcastReceiver ne peut pas être traité dans un délai spécifique3). ServiceTimeout(20 secondes) --Il existe une faible probabilité que le service ne puisse pas être traité dans un délai spécifiquePourquoi il expire : les événements n'ont aucune chance d'être traités et le délai d'expiration du traitement des événements Comment éviter l'ANRLa clé de l'ANR est le délai d'expiration du traitement, donc il doit être évité dans le thread de l'interface utilisateur, BroadcastReceiver et le thread principal du service, gérer la logique et les calculs complexes et les remettre au thread de travail pour le fonctionnement. 1) Évitez de faire des opérations fastidieuses dans l'activité, oncreate & onresume2) Évitez de faire trop d'opérations dans onReceiver3) Évitez de démarrer dans Intent Receiver An Activité car elle crée un nouvel écran et détourne le focus du programme actuellement exécuté par l'utilisateur.4)尽量使用handler来处理UI thread & workthread的交互。
如何解决ANR
首先定位ANR发生的log:
04-01 13:12:11.572 I/InputDispatcher( 220): Application is not responding:Window{2b263310com.android.email/com.android.email.activity.SplitScreenActivitypaused=false}. 5009.8ms since event, 5009.5ms since waitstarted
CPUusage from 4361ms to 699ms ago ----CPU在ANR发生前的使用情况04-0113:12:15.872 E/ActivityManager( 220): 100%TOTAL: 4.8% user + 7.6% kernel + 87% iowait04-0113:12:15.872 E/ActivityManager( 220): CPUusage from 3697ms to 4223ms later:-- ANR后CPU的使用量
从log可以看出,cpu在做大量的io操作。
所以可以查看io操作的地方。
当然,也有可能cpu占用不高,那就是 主线程被block住了。
6.Android 线程间通信有哪几种方式
1)共享变量(内存)
2)管道
3)handle机制
runOnUiThread(Runnable)
view.post(Runnable)
7.Devik 进程,linux 进程,线程的区别
Dalvik进程。
每一个android app都会独立占用一个dvm虚拟机,运行在linux系统中。
所以dalvik进程和linux进程是可以理解为一个概念。
8.描述一下 android 的系统架构
从小到上就是:
linux kernel,lib dalvik vm ,application framework, app
9.android 应用对内存是如何限制的?我们应该如何合理使用内存?
activitymanager.getMemoryClass() 获取内存限制。
关于合理使用内存,其实就是避免OOM & 内存泄露中已经说明。
10. 简述 android 应用程序结构是哪些
1)main code
2) unit test
3)mianifest
4)res->drawable,drawable-xxhdpi,layout,value,mipmap
mipmap 是一种很早就有的技术了,翻译过来就是纹理映射技术.
google建议只把启动图片放入。
5)lib
6)color
11.请解释下 Android 程序运行时权限与文件系统权限的区别
文件的系统权限是由linux系统规定的,只读,读写等。
运行时权限,是对于某个系统上的app的访问权限,允许,拒绝,询问。该功能可以防止非法的程序访问敏感的信息。
12.Framework 工作方式及原理,Activity 是如何生成一个 view 的,机制是什么
Framework是android 系统对 linux kernel,lib库等封装,提供WMS,AMS,bind机制,handler-message机制等方式,供app使用。
简单来说framework就是提供app生存的环境。
1)Activity在attch方法的时候,会创建一个phonewindow(window的子类)
2)onCreate中的setContentView方法,会创建DecorView
3)DecorView 的addview方法,会把layout中的布局加载进来。
13.多线程间通信和多进程之间通信有什么不同,分别怎么实现
线程间的通信可以参考第6点。
进程间的通信:bind机制(IPC->AIDL),linux级共享内存,boradcast,
Activity 之间,activity & serview之间的通信,无论他们是否在一个进程内。
14.Android 屏幕适配
屏幕适配的方式:xxxdpi, wrap_content,match_parent. 获取屏幕大小,做处理。
dp来适配屏幕,sp来确定字体大小
drawable-xxdpi, values-1280*1920等 这些就是资源的适配。
wrap_content,match_parent, 这些是view的自适应
weight,这是权重的适配。
15.什么是 AIDL 以及如何使用
Android Interface Definition Language
AIDL是使用bind机制来工作。
参数:
java原生参数
String
parcelable
list & map 元素 需要支持AIDL
16.Handler 机制
参考:android 进程/线程管理(一)----消息机制的框架 这个系类。
17.事件分发机制
android 事件分发机制
18.子线程发消息到主线程进行更新 UI,除了 handler 和 AsyncTask,还有什么
EventBus,广播,view.post, runinUiThread
但是无论各种花样,本质上就2种:handler机制 + 广播
19.子线程中能不能 new handler?为什么
必须可以。子线程 可以new 一个mainHandler,然后发送消息到UI Thread。
20.Android 中的动画有哪几类,它们的特点和区别是什么
视图动画,或者说补间动画。只是视觉上的一个效果,实际view属性没有变化,性能好,但是支持方式少。
属性动画,通过变化属性来达到动画的效果,性能略差,支持点击等事件。android 3.0
帧动画,通过drawable一帧帧画出来。
Gif动画,原理同上,canvas画出来。
具体可参考:https://i.cnblogs.com/posts?categoryid=672052
21.如何修改 Activity 进入和退出动画
overridePendingTransition
22.SurfaceView & View 的区别
view的更新必须在UI thread中进行
surfaceview会单独有一个线程做ui的更新。
surfaceview 支持open GL绘制。
二、项目框架的使用
23.开发中都使用过哪些框架、平台
I.EventBus 事件分发机制,由handler实现,线程间通信
II.xUtils->DbUtils,ViewUtils,HttpUtils,BitmapUtils
III.百度地图
IV.volley
V.fastjson
VI.picciso
VII.友盟
VIII.zxing
IX.Gson
24.使用过那些自定义View
pull2RefreshListView
25.自定义控件:绘制圆环的实现过程
package com.joyfulmath.samples.Cycle;import android.content.Context;import android.graphics.Canvas;import android.graphics.Paint;import android.util.AttributeSet;import android.view.View;/** * Created by Administrator on 2016/9/11 0011. */public class CycleView extends View { Paint mPaint = new Paint(); public CycleView(Context context) { this(context, null); } public CycleView(Context context, AttributeSet attrs) { super(context, attrs); initView(); } private void initView() { mPaint.setAntiAlias(true); mPaint.setStyle(Paint.Style.STROKE); mPaint.setStrokeWidth(20); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawCircle(100,100,50,mPaint); } }
CycleView
关键是canvas.drawCycle & paint.setsytle(stoken)
26.自定义控件:摩天轮的实现过程
27.GridLayout的使用
可以不需要adapter
28.流式布局的实现过程
TBD.
29.第三方登陆
QQ & 微信都有第三方登陆的sdk,要去注册app
30.第三方支付
需要看支付宝的API文档
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

React combine JSX et HTML pour améliorer l'expérience utilisateur. 1) JSX incorpore du HTML pour rendre le développement plus intuitif. 2) Le mécanisme DOM virtuel optimise les performances et réduit les opérations DOM. 3) Interface utilisateur de gestion basée sur les composants pour améliorer la maintenabilité. 4) La gestion des états et le traitement des événements améliorent l'interactivité.

Le système de réactivité de Vue 2 lutte avec le réglage de l'index de tableau direct, la modification de la longueur et l'ajout / suppression de la propriété de l'objet. Les développeurs peuvent utiliser les méthodes de mutation de Vue et Vue.set () pour assurer la réactivité.

Les composants React peuvent être définis par des fonctions ou des classes, encapsulant la logique de l'interface utilisateur et acceptant les données d'entrée via des accessoires. 1) Définissez les composants: utilisez des fonctions ou des classes pour retourner les éléments de réact. 2) Rendre le composant: React Cappel Render Method ou Exécute le composant de fonction. 3) Composants de multiplexage: passer des données à travers des accessoires pour construire une interface utilisateur complexe. L'approche du cycle de vie des composants permet d'exécuter la logique à différentes étapes, améliorant l'efficacité de développement et la maintenabilité du code.

TypeScript améliore le développement de React en offrant la sécurité du type, en améliorant la qualité du code et en offrant un meilleur support IDE, réduisant ainsi les erreurs et améliorant la maintenabilité.

React est l'outil préféré pour construire des expériences frontales interactives. 1) Réagir simplifie le développement de l'interface utilisateur par la composontisation et le DOM virtuel. 2) Les composants sont divisés en composants de fonction et composants de classe. Les composants de fonction sont plus simples et les composants de la classe fournissent plus de méthodes de cycle de vie. 3) Le principe de travail de React repose sur le DOM virtuel et l'algorithme de réconciliation pour améliorer les performances. 4) La gestion de l'État utilise USESTATE ou This. State, et des méthodes de cycle de vie telles que ComponentDidMount sont utilisées pour une logique spécifique. 5) L'utilisation de base comprend la création de composants et la gestion de l'état, et l'utilisation avancée implique des crochets personnalisés et une optimisation des performances. 6) Les erreurs courantes incluent les mises à jour de statut et les problèmes de performance inappropriés, les compétences de débogage comprennent l'utilisation de Reactdevtools et d'excellents

L'article explique l'utilisation d'un userReducer pour une gestion complexe de l'état dans React, détaillant ses avantages sur UseState et comment l'intégrer avec l'utilisation d'effet pour les effets secondaires.

Les composants fonctionnels de Vue.js sont apatrides, légers et manquent de crochets de cycle de vie, idéaux pour rendre les données pures et optimiser les performances. Ils diffèrent des composants avec état en n'ayant pas d'état ou de réactivité, en utilisant directement les fonctions de rendu, un

L'article traite des stratégies et des outils pour garantir que les composants React sont accessibles, en se concentrant sur le HTML sémantique, les attributs Aria, la navigation par clavier et le contraste des couleurs. Il recommande d'utiliser des outils comme Eslint-Plugin-JSX-A11Y et Axe-Core pour Testi
