목차
1. 성능 최적화
1. 안드로이드 애플리케이션에서 성능 분석을 수행하는 방법
2. 어떤 상황에서 메모리 누수가 발생하나요?
3. OOM 예외를 방지하는 방법
먼저 OOM이 무엇인가요?
Android의 OOM은 어떻습니까?
OOM을 방지하는 방법
메모리 개체 사용량을 줄입니다
CrashHandler
如何解决ANR
6.Android 线程间通信有哪几种方式
7.Devik 进程,linux 进程,线程的区别
8.描述一下 android 的系统架构
9.android 应用对内存是如何限制的?我们应该如何合理使用内存?
10. 简述 android 应用程序结构是哪些
11.请解释下 Android 程序运行时权限与文件系统权限的区别
12.Framework 工作方式及原理,Activity 是如何生成一个 view 的,机制是什么
13.多线程间通信和多进程之间通信有什么不同,分别怎么实现
14.Android 屏幕适配
15.什么是 AIDL 以及如何使用
16.Handler 机制
17.事件分发机制
18.子线程发消息到主线程进行更新 UI,除了 handler 和 AsyncTask,还有什么
19.子线程中能不能 new handler?为什么
20.Android 中的动画有哪几类,它们的特点和区别是什么
21.如何修改 Activity 进入和退出动画
22.SurfaceView & View 的区别
二、项目框架的使用
23.开发中都使用过哪些框架、平台
24.使用过那些自定义View
25.自定义控件:绘制圆环的实现过程
26.自定义控件:摩天轮的实现过程
27.GridLayout的使用
28.流式布局的实现过程
29.第三方登陆
30.第三方支付
웹 프론트엔드 프런트엔드 Q&A 안드로이드 고급 면접 질문과 답변 분석

안드로이드 고급 면접 질문과 답변 분석

Jul 31, 2020 pm 03:53 PM

추천: "2020 안드로이드 면접 질문 요약 [컬렉션] "

1. 성능 최적화

1. 안드로이드 애플리케이션에서 성능 분석을 수행하는 방법

안드로이드의 주요 성능은 응답 속도와 UI 새로 고침 속도입니다.

블로그를 참조할 수 있습니다: Android 시스템 성능 튜닝 도구 소개

우선, 기능 시간이 많이 걸린다는 측면에서, 기능 시간을 측정하는 데 사용되는 androidsdk에 내장된 TraceView 도구가 있습니다. 태워 버리는.

UI 레이아웃 분석은 두 부분으로 구성될 수 있습니다. 하나는 보기의 레이아웃 수준과 각 보기의 새로 고침 및 로드 시간을 볼 수 있습니다.

이렇게 하면 가장 오래 걸리는 레이아웃과 보기를 빠르게 찾을 수 있습니다.

또 다른 옵션은 보기를 사용자 정의하여 보기 수준을 줄이는 것입니다.

2. 어떤 상황에서 메모리 누수가 발생하나요?

메모리 누수는 어려운 문제입니다.

메모리 누수는 언제 발생하나요? 메모리 누수의 근본 원인: 수명이 짧은 개체를 보유하는 수명이 긴 개체입니다. 수명이 짧은 개체는 제때에 해제될 수 없습니다.

I. 정적 컬렉션 클래스로 인해 메모리 누수가 발생합니다.

주로 해시맵, 벡터 등입니다. 이러한 컬렉션이 정적 컬렉션인 경우 null이 시간에 설정되지 않으면 이러한 객체는 항상 유지됩니다.

II.remove 메소드는 Objects.hash(firstName, lastName) 세트를 삭제할 수 없습니다.

테스트 후 해시코드가 수정된 후에는 제거할 수 있는 방법이 없습니다.

III.observer 리스너를 사용할 때 xxxlistener를 추가하는 경우가 많지만, 필요하지 않을 때 xxxlistener를 제거하는 것을 잊어버리면 메모리 누수가 발생하기 쉽습니다.

방송이 수신자를 등록 취소하지 않습니다

IV. 다양한 데이터 링크가 닫히지 않습니다. 데이터베이스 콘텐츠 제공자, io, sokect 등. 커서

V. 내부 클래스:

Java의 내부 클래스(익명 내부 클래스)는 호스트 클래스에 대한 강력한 참조를 보유합니다.

따라서 새 스레드와 같은 백그라운드 스레드 작업인 경우 스레드가 끝나지 않으면 활동이 재활용되지 않습니다.

컨텍스트 참조, TextView 등은 컨텍스트 참조를 보유합니다. 정적 드로어블이 있으면 메모리가 해제되지 않습니다.

VI. 싱글톤

싱글톤은 복사된 클래스 A를 보유할 때 A를 해제할 수 없으며 메모리가 누수됩니다.

3. OOM 예외를 방지하는 방법

먼저 OOM이 무엇인가요?

프로그램에서 "대형" 메모리를 적용해야 하는데 GC 작업을 수행한 후에도 가상 머신이 제때에 이를 제공할 수 없는 경우

이 경우 OOM인 OutOfMemoryException이 발생합니다

Android의 OOM은 어떻습니까?

단일 앱이 전체 시스템에 미치는 영향을 줄이기 위해 Android는 각 앱에 메모리 제한을 설정합니다.

    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));
    }
로그인 후 복사
rrree

HTC M7 실제 측정, 상한은 192M입니다. 512M 일반적인 상황에서는 192M이 상한이지만, 일부 특수한 상황으로 인해 안드로이드에서는 더 큰 RAM 사용을 허용합니다.

OOM을 방지하는 방법

메모리 개체 사용량을 줄입니다

I. 해시맵 대신 ArrayMap/SparseArray

II. Android에서 Enum 사용을 피하세요

III.SampleSize: 스케일링 비율, 로드 전. 이미지를 메모리에 저장하려면 대용량 이미지를 불필요하게 로드하는 것을 방지하기 위해 적절한 크기 조정 비율을 계산해야 합니다.

    디코드 형식: 디코드 형식에서 ARGB_8888/RBG_565/ARGB_4444/ALPHA_8을 선택하면 큰 차이가 있습니다.
  • IV. 리소스 이미지의 크기를 줄이세요. 이미지가 너무 큰 경우 세그먼트로 로드하는 것을 고려하세요.
메모리 개체 재사용

대부분의 개체는 개체 풀 기술을 사용하여 재사용됩니다.
I.listview/gridview/recycleview contentview 재사용

II.inBitmap 메모리 개체 재사용을 위한 속성 ARGB_8888/RBG_565/ARGB_4444/ALPHA_8

이 방법은 수천 장의 사진을 로드하는 시간과 같은 특정 조건에서 매우 유용합니다.

III. ondraw 메서드에서 새 개체를 피하세요

IV.StringBuilder 대신 +

4. 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

에서 포착되지 않은 예외를 잡는 방법은 Thread.UncaughtExceptionHandler

를 구현하는 것입니다. oncreate에 애플리케이션을 등록하세요.

5.ANR이란 무엇인가요? ANR 방지 및 해결 방법 (중요)

ANR->애플리케이션이 응답하지 않습니다

즉, 지정된 시간 내에 응답이 없습니다.

세 가지 유형:

1) KeyDispatchTimeout(5초) -- 주요 유형의 키 또는 터치 이벤트가 특정 시간 내에 응답하지 않습니다.

2) --BroadcastReceiver는 일정 시간 내에 처리할 수 없습니다. 특정 시간

3) ServiceTimeout(20초) - 특정 시간 내에 서비스 유형을 처리할 수 없는 가능성이 있습니다.

시간 초과 이유: 이벤트가 처리될 기회가 없습니다.

ANR을 피하는 방법

ANR의 핵심

처리 타임아웃이므로 UI ​​스레드, BroadcastReceiver 및 서비스 메인 스레드에서 복잡한 로직 및 계산 처리를 피하고 작업에 넘겨야 합니다. 작업용 스레드입니다.

1) oncreate 및 onresume에서 시간이 많이 소요되는 작업을 피하세요

2) onReceiver에서 너무 많은 작업을 수행하지 마세요

3) Intent Receiver에서 액티비티를 시작하지 마세요. 새 화면이 생성되고 도용되기 때문입니다. 현재 사용자가 실행 중인 프로그램에서 포커스를 받습니다.

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文档

위 내용은 안드로이드 고급 면접 질문과 답변 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

useeffect 란 무엇입니까? 부작용을 수행하는 데 어떻게 사용합니까? useeffect 란 무엇입니까? 부작용을 수행하는 데 어떻게 사용합니까? Mar 19, 2025 pm 03:58 PM

이 기사에서는 Data Fetching 및 기능 구성 요소의 DOM 조작과 같은 부작용을 관리하기위한 후크 인 React의 useEffect에 대해 설명합니다. 메모리 누출과 같은 문제를 방지하기 위해 사용법, 일반적인 부작용 및 정리를 설명합니다.

게으른 하중의 개념을 설명하십시오. 게으른 하중의 개념을 설명하십시오. Mar 13, 2025 pm 07:47 PM

게으른로드는 필요할 때까지 컨텐츠로드를 지연시켜 초기로드 시간과 서버로드를 줄임으로써 웹 성능 및 사용자 경험을 향상시킵니다.

React Reconciliation 알고리즘은 어떻게 작동합니까? React Reconciliation 알고리즘은 어떻게 작동합니까? Mar 18, 2025 pm 01:58 PM

이 기사는 가상 Dom 트리를 비교하여 DOM을 효율적으로 업데이트하는 React의 조정 알고리즘을 설명합니다. 성능 이점, 최적화 기술 및 사용자 경험에 미치는 영향에 대해 설명합니다. 문자 수 : 159

JavaScript의 고차 기능은 무엇이며 어떻게 간결하고 재사용 가능한 코드를 작성하는 데 어떻게 사용할 수 있습니까? JavaScript의 고차 기능은 무엇이며 어떻게 간결하고 재사용 가능한 코드를 작성하는 데 어떻게 사용할 수 있습니까? Mar 18, 2025 pm 01:44 PM

JavaScript의 고차 기능은 추상화, 공통 패턴 및 최적화 기술을 통해 코드 간접성, 재사용 성, 모듈성 및 성능을 향상시킵니다.

카레는 JavaScript에서 어떻게 작동하며 그 이점은 무엇입니까? 카레는 JavaScript에서 어떻게 작동하며 그 이점은 무엇입니까? Mar 18, 2025 pm 01:45 PM

이 기사는 다중 연계 기능을 단일 연계 함수 시퀀스로 변환하는 기술 인 JavaScript의 카레에 대해 논의합니다. Currying의 구현, 부분 응용 프로그램 및 실제 용도와 같은 혜택, 코드 읽기 향상을 탐색합니다.

usecontext는 무엇입니까? 구성 요소간에 상태를 공유하는 데 어떻게 사용합니까? usecontext는 무엇입니까? 구성 요소간에 상태를 공유하는 데 어떻게 사용합니까? Mar 19, 2025 pm 03:59 PM

이 기사는 REACT의 USECONTEXT를 설명하며, 이는 PROP 시추를 피함으로써 상태 관리를 단순화합니다. 중앙 집중식 상태 및 성능 개선과 같은 렌더링을 통해 성능 향상과 같은 이점에 대해 논의합니다.

이벤트 핸들러의 기본 동작을 어떻게 방지합니까? 이벤트 핸들러의 기본 동작을 어떻게 방지합니까? Mar 19, 2025 pm 04:10 PM

기사에서는 extentdefault () 메서드를 사용하여 이벤트 처리기의 기본 동작 방지, 향상된 사용자 경험과 같은 이점 및 접근성 문제와 같은 잠재적 문제에 대해 논의합니다.

Connect ()를 사용하여 React 구성 요소를 Redux 상점에 어떻게 연결합니까? Connect ()를 사용하여 React 구성 요소를 Redux 상점에 어떻게 연결합니까? Mar 21, 2025 pm 06:23 PM

기사는 Connect ()를 사용하여 React 구성 요소를 Redux Store에 연결하고 MapStateToprops, MapDispatchtoprops 및 성능 영향을 설명합니다.

See all articles