Android大厂高频面试题解析,大厂面经合集

Android⼤⼚⾼频⾯试题解析,⼤⼚⾯经合集
前⾔
组件化是 保持整个 App 可持续地进⾏⾼质量开发的基础,近年来也是业界⼀直在积极探索和实践的⽅向,在深⼊理解组件化架构的过程中,将不断考验你的技术深度与⼴度;
实践中我还参考了⼗⼏家技术团队的解决⽅案(例如:美团、有赞、阿⾥等等),在这个系列⾥,我将总结我对于组件化的思考和实践。
⽬录
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 =(SystemService(Context.ACTIVITY_SERVICE);
System.out.MemoryClass());
System.out.LargeMemoryClass());
门襟衬衫System.out.Runtime().maxMemory()/(1024*1024));
}
HTC M7实测,192M上限。512M ⼀般情况下,192M就是上限,但是由于某些特殊情况,android允许使⽤⼀个更⼤的RAM。如何避免OOM
减少内存对象的占⽤
**1.**ArrayMap/SparseArray代替hashmap
**2.**避免在android⾥⾯使⽤Enum
**3.**减少bitmap的内存占⽤
inSampleSize:缩放⽐例,在把图⽚载⼊内存之前,我们需要先计算出⼀个合适的缩放⽐例,避免不必要的⼤图载⼊。led光源模组
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{ail/ail.activity.SplitScreenActiv itypaused=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 应⽤对内存是如何限制的?我们应该如何合理使⽤内存?
关于合理使⽤内存,其实就是避免OOM & 内存泄露中已经说明。
10. 简述 android 应⽤程序结构是哪些
1)main code
2. unit test

本文发布于:2024-09-23 04:30:40,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/3/329500.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:内存   线程   没有   泄露   进程   时间   对象
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议