安卓工程师的面试题怎么做,你不应该错过的 Android 全方位面试总结(1),这些知识你必须拿下

16. 动画有哪两类,各有什么特点?

  • 传统动画:帧动画和补间动画。

  • 属性动画。

区别
  • 属性动画才是真正的实现了 view 的移动,补间动画对 view 的移动更像是在不同地方绘制了一个影子,实际的对象还是处于原来的地方。

  • 当动画的 repeatCount 设置为无限循环时,如果在 Activity 退出时没有及时将动画停止,属性动画会导致 Activity 无法释放而导致内存泄漏,而补间动画却没有问题。

  • xml 文件实现的补间动画,复用率极高。在 Activity 切换,窗口弹出时等情景中有着很好的效果。

  • 使用帧动画时需要注意,不要使用过多特别大的图,容易导致内存不足。

17. Handler、Loop消息队列模型,各部分的作用。

Android消息机制包含: MessageQuene、Handler、Looper、Message.

  • Message: 需要春娣的消息,可以传递数据。

  • MessageQuene: 消息队列,通过单链表数据结构来维护消息列表,(投递和删除消息)。

  • Handler: 消息辅助类,向消息池发送各种消息事件

Handler.sendMessage 发送消息Handler.handleMessage 处理消息

  • Looper: 不断从消息队里中读取消息,按分发机制将消息分发给目标处理者。
MessageQuene、Handler 和 looper 三者之间的关系:

每个线程中只能存在一个 Looper,保存在 ThreadLocal 中。主线程(UI线程)已经创建了一个 Looper,所以在主线程中不需要再创建 Looper,其他线程中需要创建 Looper。每个线程中可以有多个 Handler,即一个 Looper 可以处理来自多个 Handler 的消息。 Looper 中维护一个 MessageQueue,来维护消息队列,消息队列中的 Message 可以来自不同的 Handler。

当调用 handler.sendMessage() 发送 message 时,实际上发送到与当前线程绑定的 MessageQuene 中,然后当前线程绑定的 Looper 不断从 MessageQueue 取出新的 Message,调用 msg.target.disspatchMessage(msg) 方法将消息分发到与 Message 绑定的 handler.handleMessage()中。

18. 怎样退出终止App。

  • 创建一个集合类对所有活动进行管理,ActivityCollector,通过 list 来管理 Activity。

  • killProcess(android.os.Process.myPid()) 杀死当前程序进程。

19. Asset目录与res目录的区别。

  • assets:不会在 R 文件中生成相应标记,存放到这里的资源在打包时会打入程序安装包中。(通过 AssetManager 类访问这些文件)

  • res:会在 R 文件中生成 id 标记,资源在打包时如果使用到则打包到安装包中,未使用到不会打入安装包中。

res/anim: 存放动画资源res/raw:和 asset 下文件一样打包时直接打入程序安装包中(会映射到 R 文件中)

Tablesassetsres/rawres/drawable
获取资源方式文件路径+文件名R.raw.xxxR.drawable.xxx
是否被压缩NONOYES(失真压缩)
能否获取子目录下的资源YESNONO

20. Android怎么加速启动Activity。

  1. onCreate() 中不执行耗时操作
  • 把页面显示的 View 细分一下,放在 AsyncTask 里逐步显示,用 Handler 更好。这样用户的看到的就是有层次有步骤的一个个的 View 的展示,不会是先看到一个黑屏,然后一下显示所有 View。

  • 最好做成动画,效果更自然。

  • 利用多线程的目的就是尽可能的减少 onCreate() 和onReume() 的时间,使得用户能尽快看到页面,操作页面。

  1. 减少主线程阻塞时间

  2. 提高 Adapter 和 AdapterView 的效率

  3. 优化布局文件

21. Android性能优化方法

  1. 布局优化:尽量减少布局文件的层级
  • 删除布局中无用的控件和层次,有选择的使用性能较低的 ViewGroup

  • 采用标签,ViewStub,布局重用可降低布局的层级(ViewStub提供了按需加载的功能,当需要时才会将 ViewStub 中布局加载到内存,提高了初始化效率)

  • 避免过度绘制

  1. 绘制优化:View 的 onDraw() 方法避免执行大量操作。
  • onDraw() 中不要创建新的布局对象。

  • onDraw() 中不做耗时任务,大量循环十分抢占 cpu 时间片,造成 View 的绘制不流畅。

  1. 内存泄漏优化
  • 避免写出内存泄漏代码

  • 通过分析工具(MAT、LeakCannary)找出潜在的内存泄漏方法,然后解决。

导致内存泄漏的原因:

  1. 集合类的泄漏

  2. 单例 / 静态变量造成内存泄漏

  3. 匿名内部类/非静态内部类造成内存泄漏

  4. 资源未关闭

  1. 响应速度的优化:避免在主线程做耗时的操作。

  2. ListView / RecyclerView优化:

  1. 使用 ViewHolder 模式来提高效率

  2. 异步加载:耗时操作放在异步线程

  3. 滑动时停止加载和分页加载

  1. 线程优化:采用线程池,避免程序中存在大量 Thread 。

  2. 其他性能优化:

  1. 不要过多的创建对象。

  2. 不要过多使用枚举类,枚举占用内存空间要比整型大。

  3. 常量使用 static final 修饰。

  4. 使用 Android 特有的数据结构。

  5. 适当采用软引用和弱引用。

  6. 采用内存缓存和磁盘缓存。

  7. 尽量采用静态内部类,可避免潜在由于内部类导致的内存泄漏。

22. Android中软引用与弱引用的应用场景。

Java 引用类型分类:外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 在 Android 应用的开发中,为了防止内存溢出,在处理一些占用内存大而且声明周期较长的对象时候,可以尽量应用软引用和弱引用技术。

软/弱引用可以和一个引用队列(ReferenceQueue)联合使用,如果软引用所引用的对象被垃圾回收器回收,Java 虚拟机就会把这个软引用加入到与之关联的引用队列中。利用这个队列可以得知被回收的软/弱引用的对象列表,从而为缓冲器清除已失效的软 / 弱引用。

如果只是想避免 OOM 异常的发生,则可以使用软引用。如果对于应用的性能更在意,想尽快回收一些占用内存比较大的对象,则可以使用弱引用。

可以根据对象是否经常使用来判断选择软引用还是弱引用。如果该对象可能会经常使用的,就尽量用软引用。如果该对象不被使用的可能性更大些,就可以用弱引用。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
img

重要知识点

下面是有几位Android行业大佬对应上方技术点整理的一些进阶资料。

高级进阶篇——高级UI,自定义View(部分展示)

UI这块知识是现今使用者最多的。当年火爆一时的Android入门培训,学会这小块知识就能随便找到不错的工作了。不过很显然现在远远不够了,拒绝无休止的CV,亲自去项目实战,读源码,研究原理吧!

  • 面试题部分合集

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

89e65ecb71ac0)

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

  • 20
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值