


Analyse der fortgeschrittenen Android-Interviewfragen und -antworten
Empfohlen: „2020 Android-Interviewfragen-Zusammenfassung [Sammlung] “
1. Wie man die Leistung von Android-Anwendungen optimiert Analyse
Die Hauptleistung von Android ist die Reaktionsgeschwindigkeit und die Aktualisierungsgeschwindigkeit der Benutzeroberfläche.
Sie können sich auf den Blog beziehen: Einführung in Android-Systemleistungsoptimierungstools
Zuallererst gibt es in Bezug auf die zeitaufwändigen Funktionen das Tool TraceView, das die Arbeit ist, die kommt Mit androidsdk wird es zum Messen zeitaufwändiger Funktionen verwendet.
Die Analyse des UI-Layouts kann aus zwei Teilen bestehen: Der Hierarchie-Viewer. Sie können die Layoutebene der Ansicht sowie die Aktualisierungs- und Ladezeit jeder Ansicht sehen.
Auf diese Weise können Sie schnell das Layout und die Ansicht finden, die am längsten dauert.
Eine weitere Möglichkeit besteht darin, die Anzahl der Ansichten durch Anpassen der Ansichten zu reduzieren.
2. Unter welchen Umständen treten Speicherlecks auf?
Speicherlecks sind ein schwieriges Problem.
Wann tritt ein Speicherverlust auf? Die Hauptursache für Speicherlecks: langlebige Objekte enthalten kurzlebige Objekte. Kurzlebige Objekte können nicht rechtzeitig freigegeben werden.
I. Statische Sammlungsklassen verursachen Speicherverluste
Hauptsächlich Hashmap, Vector usw. Wenn es sich um statische Sammlungen handelt und diese Sammlungen nicht rechtzeitig auf Null gesetzt werden, enthalten sie immer diese Objekte.
Die II.remove-Methode kann den Satz Objects.hash(firstName, lastName) nicht löschen.
Nach dem Testen, nachdem der Hashcode geändert wurde, gibt es keine Möglichkeit zum Entfernen.
III. Observer Wenn wir Listener verwenden, fügen wir oft xxxlistener hinzu, aber wenn wir ihn nicht benötigen und vergessen, xxxlistener zu entfernen, kann es leicht passieren, dass der Speicher verloren geht.
Die Übertragung wird nicht vom Empfänger abgemeldet
IV. Verschiedene Datenlinks sind nicht geschlossen, Datenbankinhaltsanbieter, io, sokect usw. Cursor
V. Interne Klasse:
Die interne Klasse (anonyme interne Klasse) in Java enthält die starke Referenz dieser Hostklasse.
Wenn es sich also um einen Hintergrund-Thread-Vorgang wie einen neuen Thread handelt und der Thread nicht endet, wird die Aktivität nicht wiederverwendet.
Kontextreferenz, Textansicht usw. enthalten die Kontextreferenz. Wenn ein statisches Drawable vorhanden ist, wird der Speicher nicht freigegeben.
VI. Singleton
Beim Halten einer kopierten Klasse A kann A nicht freigegeben werden und der Speicher verliert.
3. Wie vermeide ich OOM-Ausnahmen
Was ist OOM?
Wenn das Programm einen „großen“ Speicher beantragen muss, die virtuelle Maschine ihn jedoch nicht rechtzeitig bereitstellen kann, selbst nachdem der GC-Vorgang ausgeführt wurde
Dies löst eine OutOfMemoryException aus, die OOM ist
Wie wäre es mit Androids OOM?
Um die Auswirkungen einer einzelnen APP auf das gesamte System zu reduzieren, legt Android für jede App ein Speicherlimit fest.
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)); }
HTC M7 tatsächliche Messung, 192M Obergrenze. 512 MB Unter normalen Umständen ist 192 MB die Obergrenze, aber aufgrund einiger besonderer Umstände erlaubt Android die Verwendung eines größeren RAM.
So vermeiden Sie OOM
Reduzieren Sie die Speicherobjektnutzung
I.ArrayMap/SparseArray anstelle von Hashmap
II. Vermeiden Sie die Verwendung von Enum in Android
III. Reduzieren Sie die Speichernutzung von Bitmap
inSampleSize: Vor dem Laden des Bildes in den Speicher müssen wir ein geeignetes Skalierungsverhältnis berechnen, um unnötiges Laden großer Bilder zu vermeiden .- Dekodierformat: Dekodierungsformat, wählen Sie ARGB_8888/RBG_565/ARGB_4444/ALPHA_8, es gibt große Unterschiede. Reduzieren Sie die Größe von Ressourcenbildern, erwägen Sie das Laden in Abschnitten
Wiederverwendung von Speicherobjekten
Wiederverwendung der meisten Objekte . Sie alle nutzen Objektpool-Technologie.
I.listview/gridview/recycleview contentview Wiederverwendung
II.inBitmap-Attribut Wiederverwendung von Speicherobjekten ARGB_8888/RBG_565/ARGB_4444/ALPHA_8
Diese Methode wird in einem bestimmten It verwendet ist unter bestimmten Bedingungen sehr nützlich, beispielsweise wenn Tausende von Bildern geladen werden sollen.
III. Vermeiden Sie neue Objekte in der Ondraw-Methode
IV.StringBuilder statt +
4. So fangen Sie nicht abgefangene Ausnahmen in Android ab
rrreeCrashHandlerDer Schlüssel besteht darin, Thread.UncaughtExceptionHandler
zu implementieren und es dann beim Erstellen der Anwendung zu registrieren.
5.Was ist ANR? So vermeiden und lösen Sie ANR (Wichtig)
ANR->Anwendung reagiert nicht
Das heißt, es erfolgt keine Antwort innerhalb der angegebenen Zeit.
Drei Typen:
1). (10 Sekunden) --BroadcastReceiver kann nicht innerhalb einer bestimmten Zeit verarbeitet werden
3). ServiceTimeout(20 Sekunden) --Es besteht eine geringe Wahrscheinlichkeit, dass der Dienst nicht innerhalb einer bestimmten Zeit verarbeitet werden kann
Warum es zu einer Zeitüberschreitung kommt: Ereignisse können nicht verarbeitet werden und es kommt zu einer Zeitüberschreitung bei der Ereignisverarbeitung
So vermeiden Sie ANR
Der Schlüssel zu ANR
ist die Zeitüberschreitung bei der Verarbeitung sollte im UI-Thread, BroadcastReceiver und Service-Hauptthread vermieden werden, komplexe Logik und Berechnungen verarbeiten
und sie zur Ausführung an den Arbeitsthread übergeben.
1) Vermeiden Sie zeitaufwändige Vorgänge in der Aktivität, oncreate und onresume
2) Vermeiden Sie zu viele Vorgänge in onReceiver
3) Vermeiden Sie den Start in Intent Receiver An Aktivität, da dadurch ein neuer Bildschirm erstellt wird und dem aktuell vom Benutzer ausgeführten Programm der Fokus entzogen wird.
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文档
Das obige ist der detaillierte Inhalt vonAnalyse der fortgeschrittenen Android-Interviewfragen und -antworten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



In dem Artikel wird die Verwendung von UseEffect in React, einen Haken für die Verwaltung von Nebenwirkungen wie Datenabrufen und DOM -Manipulation in funktionellen Komponenten erläutert. Es erklärt die Verwendung, gemeinsame Nebenwirkungen und Reinigung, um Probleme wie Speicherlecks zu verhindern.

Lazy Ladeverzögerung des Ladens von Inhalten bis zur Bedarf, Verbesserung der Webleistung und Benutzererfahrung durch Reduzierung der anfänglichen Ladezeiten und des Serverlasts.

Der Artikel erläutert den Versöhnungsalgorithmus von React, der das DOM effizient aktualisiert, indem virtuelle DOM -Bäume verglichen werden. Es werden Leistungsvorteile, Optimierungstechniken und Auswirkungen auf die Benutzererfahrung erörtert.

Funktionen höherer Ordnung in JavaScript verbessern die Übersichtlichkeit, Wiederverwendbarkeit, Modularität und Leistung von Code durch Abstraktion, gemeinsame Muster und Optimierungstechniken.

In dem Artikel wird das Currying in JavaScript, einer Technik, die Multi-Argument-Funktionen in Einzelargument-Funktionssequenzen verwandelt. Es untersucht die Implementierung von Currying, Vorteile wie teilweise Anwendungen und praktische Verwendungen, Verbesserung des Code -Lesens

Der Artikel erläutert den Usecontext in React, was das staatliche Management durch Vermeidung von Prop -Bohrungen vereinfacht. Es wird von Vorteilen wie zentraler Staat und Leistungsverbesserungen durch reduzierte Neulehre erörtert.

In Artikeln werden das Standardverhalten bei Ereignishandlern mithilfe von PURDDEFAULT () -Methoden, seinen Vorteilen wie verbesserten Benutzererfahrungen und potenziellen Problemen wie Barrierefreiheitsproblemen verhindern.

In Artikel werden die Verbindungskomponenten an Redux Store mit Connect () verbinden, wobei MapStatetoprops, MapDispatchtoprops und Leistungsauswirkungen erläutert werden.
