乐趣区

关于android:Android面试整理了Android面试官最常问的26道面试题-教你吊打面试官

前言

面试时总被面试官挖的 Android 根底题掉坑里?整顿了 26 道面试题,牢固你的根底!(附《Android 开发面试题以及答案整顿》)

  • 1. 如何对 Android 利用进行性能剖析
  • 2. 什么状况下会导致内存泄露
  • 3. 如何防止 OOM 异样
  • 4.Android 中如何捕捉未捕捉的异样
  • 5.ANR 是什么?怎么防止和解决 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. 第三方领取
  • 31. 过程保活

一、性能优化

1. 如何对 Android 利用进行性能剖析

android 性能次要之响应速度 和 UI 刷新速度。

能够参考博客:Android 零碎性能调优工具介绍

首先从函数的耗时来说,有一个工具 TraceView 这是 androidsdk 自带的工作,用于测量函数耗时的。

UI 布局的剖析,能够有 2 块,一块就是 Hierarchy Viewer 能够看到 View 的布局档次,以及每个 View 刷新加载的工夫。

这样能够很快定位到那块 layout & View 耗时最长。

还有就是通过自定义 View 来缩小 view 的档次。

2. 什么状况下会导致内存泄露

内存泄露是个折腾的问题。

什么时候会产生内存泄露?内存泄露的根本原因:长生命周期的对象持有短生命周期的对象。短周期对象就无奈及时开释。

1. 动态汇合类引起内存泄露

次要是 hashmap,Vector 等,如果是动态汇合 这些汇合没有及时 setnull 的话,就会始终持有这些对象。

2.remove 办法无奈删除 set 集 Objects.hash(firstName, lastName)通过测试,hashcode 批改后,就没有方法 remove 了。

3.observer 咱们在应用监听器的时候,往往是 addxxxlistener,然而当咱们不须要的时候,遗记 removexxxlistener,就容易内存 leak。

播送没有 unregisterrecevier

4. 各种数据链接没有敞开,数据库 contentprovider,io,sokect 等。cursor

5. 外部类:

java 中的外部类(匿名外部类),会持有宿主类的强援用 this。

所以如果是 new Thread 这种,后盾线程的操作,当线程没有执行完结时,activity 不会被回收。

Context 的援用,当 TextView 等等都会持有上下文的援用。如果有 static drawable,就会导致该内存无奈开释。

6. 单例

单例 是一个全局的动态对象,当持有某个复制的类 A 是,A 无奈被开释,内存 leak。

3. 如何防止 OOM 异样

首先 OOM 是什么?

当程序须要申请一段“大”内存,然而虚拟机没有方法及时的给到,即便做了 GC 操作当前

这就会抛出 OutOfMemoryException 也就是 OOM

Android 的 OOM 怎么样?

为了缩小单个 APP 对整个零碎的影响,android 为每个 app 设置了一个内存下限。

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 实测,192M 下限。512M 个别状况下,192M 就是下限,然而因为某些非凡状况,android 容许应用一个更大的 RAM。

如何防止 OOM

缩小内存对象的占用

1.ArrayMap/SparseArray 代替 hashmap

2. 防止在 android 外面应用 Enum

3. 缩小 bitmap 的内存占用

  • inSampleSize:缩放比例,在把图片载入内存之前,咱们须要先计算出一个适合的缩放比例,防止不必要的大图载入。
  • decode format:解码格局,抉择 ARGB\_8888/RBG\_565/ARGB\_4444/ALPHA\_8,存在很大差别。

4. 缩小资源图片的大小,过大的图片能够思考分段加载

内存对象的反复利用

大多数对象的复用,都是利用对象池的技术。

1.listview/gridview/recycleview contentview 的复用

2.inBitmap 属性对于内存对象的复用 ARGB\_8888/RBG\_565/ARGB\_4444/ALPHA\_8

这个办法在某些条件下十分有用,比方要加载上千张图片的时候。

3. 防止在 ondraw 办法外面 new 对象

4.StringBuilder 代替 +

4.Android 中如何捕捉未捕捉的异样

CrashHandler

要害是实现 Thread.UncaughtExceptionHandler

而后是在 application 的 oncreate 外面注册。

5.ANR 是什么?怎么防止和解决 ANR(重要)

ANR->Application Not Responding

也就是在规定的工夫内,没有响应。

三种类型:

1). KeyDispatchTimeout(5 seconds) —次要类型按键或触摸事件在特定工夫内无响应

2). BroadcastTimeout(10 seconds) —BroadcastReceiver 在特定工夫内无奈解决实现

3). ServiceTimeout(20 seconds) —小概率类型 Service 在特定的工夫内无奈解决实现

为什么会超时:事件没有机会解决 & 事件处理超时

怎么防止 ANR

ANR 的要害

是解决超时,所以应该防止在 UI 线程,BroadcastReceiver 还有 service 主线程中,解决简单的逻辑和计算

而交给 work thread 操作。

1)防止在 activity 外面做耗时操作,oncreate & onresume

2)防止在 onReceiver 外面做过多操作

3)防止在 Intent Receiver 里启动一个 Activity,因为它会创立一个新的画面,并从以后用户正在运行的程序上争夺焦点。

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% iowait  
  
04-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

  1. 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 画进去。

21. 如何批改 Activity 进入和退出动画

overridePendingTransition

22.SurfaceView & View 的区别

view 的更新必须在 UI thread 中进行

surfaceview 会独自有一个线程做 ui 的更新。

surfaceview 反对 open GL 绘制。

二、我的项目框架的应用

23. 开发中都应用过哪些框架、平台

1.EventBus 事件散发机制,由 handler 实现,线程间通信

2.xUtils->DbUtils,ViewUtils,HttpUtils,BitmapUtils

3. 百度地图

4.volley

5.fastjson

6.picciso

7. 友盟

8.zxing

9.Gson

24. 应用过那些自定义 View

pull2RefreshListView

25. 自定义控件:绘制圆环的实现过程

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);  
   }  
}  

要害是 canvas.drawCycle & paint.setsytle(stoken)

26. 自定义控件:摩天轮的实现过程

对于面试的充分准备

一些基础知识和实践必定是要背的,要了解的背,用本人的语言总结一下背下来。尽管 Android 没有前几年炽热了,曾经过来了会四大组件就能找到高薪职位的时代了。这只能阐明 Android 中级以下的岗位饱和了,当初高级工程师还是比拟短少的,所以致力让本人成为高级工程师才是最重要的。

最初

给大家分享一份《Android 高级开发面试题以及答案整顿》心愿对大家有帮忙!内容特点:条理清晰,含图像化示意更加易懂。篇幅无限,展现局部截图,须要完整版点击这里收费支付!

内含:Activity、Fragment、service、布局优化、AsyncTask 相干、Android 事件散发机制、Binder、Android 高级必备:AMS,WMS,PMS、Glide、Android 组件化与插件化等面试题和技术栈!

《Android 高级开发面试题以及答案整顿》

一、Handler 相干常识

二、Activity 相干

三、Fragment

四、Service 相干

五、Android 布局优化之 ViewStub、include、merge

六、BroadcastReceiver 相干

七、AsyncTask 相干

八、Android 事件散发机制

九、Android View 绘制流程

十、Android Window、Activity、DecorView 以及 ViewRoot

十一、Android 的外围 Binder 多过程 AIDL

十二、Android 高级必备:AMS,WMS,PMS

十三、Android ANR

十四、Android 内存相干

十五、Android 屏幕适配

十六、Android 缓存机制

十七、Android 性能优化

十八、Android MVC、MVP、MVVM

十九、Android Gradle 常识

二十、RxJava

二十一、OKHTTP 和 Retrofit

二十二、最风行图片加载库:Glide

二十三、Android 组件化与插件化

篇幅无限,须要完整版《Android 高级开发面试题以及答案整顿》的敌人点击这里收费支付,保障收费分享!还有 Android 开发相干学习材料以及视频解析都能够收费支付!

退出移动版