9102年底将至,BAT高级开发21道汇总:Bitmap,成为阿里P7移动架构师到底有多难

本文深入探讨了Android中Bitmap的内存占用计算,缓存更新策略,以及Handler的消息机制和性能优化问题。内容包括Bitmap的内存计算公式,缓存策略,Handler的流程,内存泄露解决方案,以及内存和性能优化实践。
摘要由CSDN通过智能技术生成

bitmap.recycle()方法用于回收该 Bitmap 所占用的内存,接着将 bitmap 置空,最后使用 System.gc()调用一下系统的垃圾回收器进行回收,调用 System.gc()并不能保证立即开始进行回收过程,而只是为了加快回收的到来

3、一张 Bitmap 所占内存以及内存占用的计算
参考回答:

Bitamp 所占内存大小 = 宽度像素 x (inTargetDensity /inDensity) x 高度像素 x (inTargetDensity / inDensity)x 一个像素所占的内存字节大小

注: 这里 inDensity 表示目标图片的 dpi(放在哪个资源文件夹下),inTargetDensity 表示目标屏幕的 dpi,所以你可以发现 inDensityinTargetDensity 会对Bitmap 的宽高进行拉伸,进而改变 Bitmap 占用内存的大小。

在 Bitmap 里有两个获取内存占用大小的方法。

  • getByteCount()API12 加入,代表存储 Bitmap 的像素需要的最少内存。
  • getAllocationByteCount()API19 加入,代表在内存中为 Bitmap 分配的内存大小,代替了getByteCount() 方法。
  • 在不复用 Bitmap 时,getByteCount()getAllocationByteCount 返回的结果是一样的。在通过复用 Bitmap 来解码图片时,那么 getByteCount()表示新解码图片占用内存的大 小,getAllocationByteCount() 表示被复用 Bitmap 真实占用的内存大小
4、Android 中缓存更新策略 ?
参考回答:

Android 的缓存更新策略没有统一的标准,一般来说,缓存策略主要包含缓存的添加、获取和删除这三类操作,但不管是内存缓存还是存储设备缓存,它们的缓存容量是有限制的,因此删除一些旧缓存并添加新缓存,如何定义缓存的新旧这就是一种策略,不同的策略就对应着不同的缓存算法

比如可以简单地根据文件的最后修改时间来定义缓存的新旧,当缓存满时就将最后修改时间较早的缓存移除,这就是一种缓存算法,但不算很完美

5

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整资料开源分享

、LRU 的原理 ?

参考回答:

为减少流量消耗,可采用缓存策略。常用的缓存算法是LRU(Least Recently Used):当缓存满时, 会优先淘汰那些近期最少使用的缓存对象。主要是两种方式:

  • LruCache(内存缓存):LruCache 类是一个线程安全的泛型类:内部采用一个 LinkedHashMap 以强引用的方式存储外界的缓存对象,并提供 get 和 put 方法来完成缓存的获取和添加操作,当缓存满时会移除较早使用的缓存对象,再添加新的缓存对象。
  • DiskLruCache(磁盘缓存): 通过将缓存对象写入文件系统从而实现缓存效果

二.Handler

6.谈谈消息机制 Handler 作用 ?有哪些要素 ?流程是怎样的 ?

7.一个线程能否创建多个 Handler,Handler 跟 Looper 之间的对应关系 ?

8.软引用跟弱引用的区别

9.Handler 引起的内存泄露原因以及最佳解决方案

10.为什么系统不建议在子线程访问 UI?

11.Looper 死循环为什么不会导致应用卡死?

12.使用 Handler 的 postDealy 后消息队列会有什么变化?

13.可以在子线程直接 new 一个 Handler 吗?怎么做?

14.Message 可以如何创建?哪种效果更好,为什么?

三.性能优化

15.图片的三级缓存中,图片加载到内存中,如果内存快爆了,会发生什么?怎么处理?

16.内存中如果加载一张 500*500 的 png 高清图片.应该是占用多少的内存?

17.WebView 的性能优化 ?

18.Bitmap 如何处理大图,如一张 30M 的大图,如何预防 OOM?

19.内存回收机制与 GC 算法(各种算法的优缺点以及应用场景);GC 原理时机以及 GC 对象

20.内存泄露和内存溢出的区别 ?AS 有什么工具可以检测内存泄露

21.性能优化,怎么保证应用启动不卡顿? 黑白屏怎么处理?

最后

为了不影响阅读,针对于上面的面试题我总结出了互联网公司Android程序员面试涉及到的绝大部分面试题及答案解析及知识点参考做成了文档(983页PDF)和架构视频资料免费分享给大家!(含有从基础到进阶。含有BATJ.字节跳动面试专题,算法专题,高端技术专题,混合开发专题,java面试专题,Android,Java小知识,到性能优化.线程.View.OpenCV.NDK等应有尽有。还有辅之相关的视频+学习笔记

整理不易,希望大家在明年有个好的成功,分享是一种美德,觉得不错的朋友可以点赞后分享给更多的朋友!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值