Android开发面试题及参考答案.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

Android开发面试题及参考答案

一、基础语法与Android核心组件

问题:Java中的HashMap和SparseArray有什么区别?Android中什么时候优先用SparseArray?

答案:HashMap存储键值对时会自动装箱(int→Integer),存在对象开销,且扩容时会重建哈希表,内存占用和性能开销较大;SparseArray直接以int为键,避免装箱,通过二分查找定位元素,删除时用标记回收而非立即移位,效率更高。Android中当键为int类型、数据量在千级以内时优先用SparseArray(比如存储列表数据的索引映射),数据量过大(万级以上)时二分查找效率下降,仍选HashMap。

问题:Activity的启动模式有哪些?SingleTask和SingleInstance的核心区别是什么?

答案:启动模式有standard、singleTop、singleTask、singleInstance四种。核心区别:singleTask会在当前任务栈中查找是否存在该Activity实例,存在则销毁其上方所有Activity并复用,仍运行在原任务栈;singleInstance会为该Activity单独创建一个新任务栈,且栈内只能有这一个实例,其他应用启动该Activity时也会复用这个独立栈的实例(比如系统电话、闹钟界面常用)。

问题:BroadcastReceiver有哪两种注册方式?各自的优缺点和使用场景是什么?

答案:两种注册方式分别是静态注册(AndroidManifest.xml中声明)和动态注册(代码中registerReceiver)。静态注册优点:应用未启动时也能接收广播(比如开机启动、网络变化广播),缺点是常驻内存,耗电耗资源,Android8.0后大部分隐式广播被限制;动态注册优点:灵活可控,可在Activity生命周期内注册/取消,不占用常驻内存,缺点是应用退出(或取消注册后)无法接收广播,需注意在onDestroy中取消注册避免内存泄漏。

二、布局与UI优化

问题:ConstraintLayout相比LinearLayout、RelativeLayout的优势是什么?实际开发中如何用它优化布局层级?

答案:LinearLayout仅支持线性排列,复杂布局需多层嵌套;RelativeLayout支持相对定位,但测量时需遍历子View两次,性能开销大;ConstraintLayout支持线性、相对、百分比等多种定位方式,可在单层布局中实现复杂UI,测量时仅遍历一次,大幅减少布局层级和测量耗时。优化技巧:用constraintDimensionRatio设置宽高比,用goneMargin处理View隐藏后的间距,用Group统一控制多个View的显示隐藏,避免嵌套LinearLayout和RelativeLayout。

问题:RecyclerView的复用机制是什么?如何解决ViewHolder的内存泄漏问题?

答案:RecyclerView通过Recycler缓存池管理ViewHolder,分为四级缓存:第一级是AttachedScrap(屏幕内可见的ViewHolder),第二级是CachedScrap(刚移出屏幕的ViewHolder,数据未变可直接复用),第三级是ViewCacheExtension(自定义缓存),第四级是RecycledViewPool(缓存已解绑数据的ViewHolder,复用前需重新绑定数据)。内存泄漏原因:ViewHolder中持有Activity/Fragment的强引用(比如上下文、监听器),导致Activity销毁后无法被GC回收。解决方法:1.用WeakReference持有上下文或Activity引用;2.在Adapter的onDetachedFromRecyclerView方法中移除所有监听器;3.避免在ViewHolder中存储静态Activity引用;4.用Application上下文代替Activity上下文(非必须时)。

三、性能优化

问题:Android中常见的内存泄漏场景有哪些?如何检测和修复?

答案:常见场景:1.单例持有Activity上下文(单例生命周期长于Activity);2.静态集合未清理(比如staticList存储大量数据);3.Handler内存泄漏(匿名内部类持有Activity引用,消息队列未处理完消息);4.未取消的监听器/广播(比如注册了SensorListen

文档评论(0)

151****9429 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档