9102年底将至,BAT高级开发21道汇总:Bitmap+Handler+性能优化篇

Mac安装Weblogic教程 1.Weblogic的下载 这次安装的是最新版本12 官网下载地址: http://www.oracle.com/technetwork/middleware/weblogic/downloads/index.html 下载需要登录账号,如没有账号要注册一个 下载后的文件如下图,其中fmw_12.2.1.3.0_wls_quick.jar文件就是安装包了,注意现在不要对它进行解压 2.安装前的确... 阅读详情

前言

面试:如果不准备充分的面试,完全是浪费时间,更是对自己的不负责。

今天给大家分享下我整理的BAT架构面试专题及答案,其中大部分都是大企业面试常问的面试题,可以对照这查漏补缺,当然了,这里所列的肯定不可能覆盖全部方式,不过也希望能对即将找工作的朋友起到一些帮助!在这由于文字很多,我总结了Android面试所涉及到的常问范围及架构面试专题和答案解析和架构视频资料分享给大家

更多完整项目下载。未完待续。源码。图文知识后续上传github。
可以点击关于我联系我获取

今天先来分析一下Bitmap+Handler+性能优化

一.Bitmap

1、Bitmap 使用需要注意哪些问题 ?
参考回答:

1)要选择合适的图片规格(bitmap 类型): 通常我们优化Bitmap 时,当需要做性能优化或者防止 OOM,我们通常会使用 RGB_565,因为 ALPHA_8 只有透明度,显示一般图片没有意义,Bitmap.Config.ARGB_4444 显示图片不清楚,Bitmap.Config.ARGB_8888 占用内存最多。:

  • ALPHA_8 每个像素占用 1byte 内存
  • ARGB_4444 每个像素占用 2byte 内存
  • ARGB_8888 每个像素占用 4byte 内存(默认)
  • RGB_565 每个像素占用 2byte 内存

2)降低采样率: BitmapFactory.Options 参数 inSampleSize 的使用,先把 options.inJustDecodeBounds 设为 true,只是去读取图片的大小,在拿到图片的大小之后和要显示的大小做比较通过 calculateInSampleSize()函数计算 inSampleSize 的具体值,得到值之后。options.inJustDecodeBounds 设为 false读图片资源。

3)复用内存: 即通过软引用(内存不够的时候才会回收掉),复用内存块,不需要再重新给这个 bitmap 申请一块新的内存,避免了一次内存的分配和回收,从而改善了运行效率。

4)使用 recycle()方法及时回收内存。

5)压缩图片

2、Bitmap.recycle()会立即回收么?什么时候会回收?如果没有地方使用这个 Bitmap,为什么垃圾回收不会直接回收?
参考回答:

通过源码可以了解到,加载 Bitmap 到内存里以后,是包含两部分内存区域的。简单的说,一部分是 Java 部分的,一部分是 C部分的。这个 Bitmap 对象是由 Java 部分分配的,不用的时候系统就会自动回收了

但是那个对应的 C 可用的内存区域,虚拟机是不能直接回收的,这个只能调用底层的功能释放。所以需要调用 recycle()方法来释放 C 部分的内存

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

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

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

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

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

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

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

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

5、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等应有尽有。还有辅之相关的视频+学习笔记)

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

请查看完整的PDF版

更多完整项目下载。未完待续。源码。图文知识后续上传github。
可以点击关于我联系我获取

王炸联动!OpenClaw 对接微信 / 企业微信保姆级教程,AI 办公效率翻倍 《OpenClaw对接微信/企业微信全指南》摘要:本文提供开源AI智能体OpenClaw与微信生态的完整对接教程。核心内容包括企业微信配置四步法(获取凭证、修改配置、重启服务、验证对接)和个人微信通过企业微信插件的一键打通方案。对接后支持微信/企微发指令AI秒执行、群聊机器人、文件同步等高效办公场景,并附常见问题排查代码。教程强调配置简单(全程可复制代码)、适用广泛(个人/团队场景),实现沟通与AI协作的无缝衔接。文末包含端口放行等实用命令,助力用户快速实现移动端AI办公。(149字) 阅读详情

相关推荐

从选卡到验证:CST仿真GPU加速全流程实战指南

本文详细介绍了CST仿真中GPU加速的全流程实战指南,从硬件选型到软件配置,再到性能验证和常见问题排查。通过对比专业卡与游戏卡的性能差异,提供硬件选型建议,并分享驱动安装、关键设置及CST软件配置的黄金法则,帮助用户显著提升仿真效率。

weixin_30650039的博客 394

Handler传递Bitmap

Bitmap bitmapAddText = xx方法(); Message msg = new Message(); msg.what = 1; msg.obj = bitmapAddText; ...

烧烤电影香烟和啤酒 1025

SAP 公司间库存调拨通过IDOC完成自动发票校验

本文仅用于SAP软件的应用与学习,不代表SAP公司。(注:文中所示截图来源SAP ERP软件,软件相应著作权归SAP所有。公司间采购时,通过SAP内部EDI 数据传输功能, 由销售方开的公司间发票自动触发采购方的发票校验。​欢迎扫码加如下微信,我会把大家拉到SAP PP学习群,随时欢迎跟我和其他SAP PP顾问一起交流和学习,如下图库存调拨订单,系统已经完成了发货方发货和收货方收货。

2402_84262664的博客 923

Bitmap和性能优化

Bitmap使用需要注意哪些问题 ? Bitmap.recycle()会立即回收么?什么时候会回收?如果没有地方使用这个Bitmap,为什么垃圾回收不会直接回收? 一张Bitmap所占内存以及内存占用的计算 Android中缓存更新策略 ? LRU的原理 ? 图片的三级缓存中,图片加载到内存中,如果内存快爆了,会发生什么?怎么处理? 内存中如果加载一张500*500的png高清图片.应该是占用多少...

githlb的博客 467

【胡学长 带你学 Global Mapper 】如何将影像地图转换为国家2000坐标系

多部门联合开展工作坐标数据不匹配怎么办?Hi,我是胡学长!今天教大家如何利用Global Mapper将谷歌影像数据转换为国家2000坐标系影像数据 。

一起来交流学习吧 1万+

携程旅行网景区,评论数据爬虫项目数据库保存附源码

这是一个专门用于爬取某旅行网景区评论数据的Python爬虫项目。项目采用模块化设计,支持MySQL数据库存储,具备完整的异常处理机制和反爬虫策略。

ymqzhy的博客 2568

android 获取Bitmap 的两种方法

这里我直接贴代码了。   第一种方法 Java代码 //得到Resources对象  Resources r = this.getContext().getResources();  //以数据流的方式读取资源  Inputstream is = r.openRawResource(R.drawable.my_background_image);  BitmapDrawable  bmp

分享+记录 3118

从BAM到bigWig:用UCSC工具链完成测序数据可视化的完整流程

本文详细介绍了从BAM文件到bigWig格式的基因组数据可视化完整流程,涵盖UCSC工具链配置、文件格式转换、参数优化及常见问题解决方案。通过实战指南帮助研究人员高效完成测序数据可视化,特别适合ChIP-seq和RNA-seq数据分析。

weixin_29309213的博客 706

Bitmap.recycle()会立即回收么?什么时候会回收?如果没有地方使用这个Bitmap,为什么垃圾回收不会直接回收?

o bitmap.recycle()方法用于回收该Bitmap 所占用的内存,接着。 getByteCount():API12 加入,代表存储 Bitmap 的。将bitmap 置空,最后使用System.gc()调用一下系统的垃圾回。这个Bitmap 对象是由Java 部分分配的,不用的时候。的,这个只能调用底层的功能释放。Bitmap 的宽高进行拉伸,进而改变Bitmap 占用内存的。简单的说,一部分是Java 部分的,一部分是C。o 但是那个对应的C 可用的内存区域,虚拟机是不能直接回收。

yzwfeng的专栏 1600

【AI 智能体】Windows 环境 Hermes Agent(爱马仕)安装详细过程

Windows 环境 Hermes Agent(爱马仕)安装详细过程

congge_study的博客 1824

硬件学习手册【总目录】

欢迎大家来到《硬件学习手册》,专栏主要包括 《硬件经验手册》《电子元器件器件手册》《PCB手册》《CPU手册》《元器件选型手册》五个分册。在开始专栏的更新前,博主先列出专栏的大纲,以供大家参考。大家直接点击大纲中的蓝色标题即可轻松传送。

fydar的博客 5851

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

bitmap.recycle()方法用于回收该 Bitmap 所占用的内存,接着将 bitmap 置空,最后使用 System.gc()调用一下系统的垃圾回收器进行回收,调用 System.gc()并不能保证立即开始进行回收过程,而只是为了加快回收的到来 3、一张 Bitmap 所占内存以及内存占用的计算 参考回答: Bitamp 所占内存大小 = 宽度像素 x (inTargetDensity /inDensity) x 高度像素 x (inTargetDensity / inDensity)x 一个像素

jkjk322的博客 231

量化之趋势跟踪策略

趋势跟踪策略 import numpy as np import pandas as pd import matplotlib as mpl import matplotlib.pyplot as plt import seaborn as sns from finance import GetData import warnings; warnings.filterwarnings('ignore') data = GetData.get_data('../data/002236.csv') .

木头大左的博客 2533

9102年底将至,BAT高级开发21道汇总:Bitmap,【2021Android最新学习路线】

注: 这里 inDensity 表示目标图片的 dpi(放在哪个资源文件夹下),inTargetDensity 表示目标屏幕的 dpi,所以你可以发现 inDensity 和 inTargetDensity 会对Bitmap 的宽 高进行拉伸,进而改变 Bitmap 占用内存的大小。 在 Bitmap 里有两个获取内存占用大小的方法。 getByteCount():API12 加入,代表存储 Bitmap 的像素需要的最少内存。 getAllocationByteCount():API19 加入,代表在内

m0_66144910的博客 101

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

android bitmap回收,android BitMap回收

bitmap在android中使用较多,但是如果不对其进行回收,将会导致内存问题。【第一种方法】及时回收bitmap内存:一般而言,回收bitmap内存可以用到以下代码if(bitmap != null && !bitmap.isRecycled()){bitmap.recycle();bitmap = null;}System.gc();bitmap.recycle()方法用于回...

weixin_35734408的博客 1189

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Android之Bitmap总结篇

Android面试之Bitmap

是非的Android学习之路 503

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

bitmap资源回收问题

图片是一个很费内存空间的资源,所以对图片的处理一定要考虑到内存溢出问题。说下bitmap的心得:        Bitmap 的内存自动回收机制不是那么理想,往往要自己处理(这也是官方文档的建议),一般来说,要 遵循以下原则:               1.临时的,已经没用的 bitmap 对象要及时调用 recycle() 释放,例如: mBitWallPaper.recycle(); m

仰视未来的专栏 1754

Bitmap优化及内存优化

Android系统中Bitmap是否有调用recycle方法的必要性Bitmap需调用 recycle() 是历史问题,在 Android 3.0之前,Bitmap 的图片数据是在底层C中处理的,因此在 Android3.0 之前 recycle() 是应该调用的。虽然 finalize() 会调用 recycle() ,但对Java有经验的同学应该知道只依靠 finalize() 去释放资源是会出

路漫漫亦无涯 1437

Bitmap内存回收机制

这个知识点,官方也改了 2 次 Bitmap可以说是安卓里面最常见的内存消耗大户了,我们开发过程中遇到的oom问题很多都是由它引发的。谷歌官方也一直在迭代它的像素内存管理策略。从 Android 2.3.3以前的分配在native上,到2.3-7.1之间的分配在java堆上,又到8.0之后的回到native上。几度变迁,它的回收方法也在跟着变化。 Android 2.3.3以前 2.3.3以前Bitmap的像素内存是分配在natvie上,而且不确定什么时候会被回收。根据官方文档的说法我们需要手动调用B

chuyouyinghe的专栏 1739

Bitmap recycle()

Bitmap调用recycle? When?Bitmap有一个recycle方法,意思很简单,回收Bitmap的空间。Q 1: Bitmap是否有调用recycle方法的必要性?A: 嵌入式系统总是格外注重空间的问题,不小心的话就会有OOM。但是应用层使用java的android平台有其天然的优势【java语言有自己的垃圾回收,android平台上各个application有自己的process自己的空间】。    无需调用bitmap的理由有:    a. 垃圾回收会处理的;    b. 当applica

2万+

面试官问我:如何加载100M的图片却不撑爆内存

还记得当年面试一个面试官问我怎么加载巨图才能不撑爆内存,我没回答上来,他说分片显示,我寻思特么分片能减少内存使用??现在可以打他脸了! 内容扩展 1.图片的三级缓存中,图片加载到内存中,如果内存快爆了,会发生什么?怎么处理? 2.内存中如果加载一张 500*500 的 png 高清图片.应该是占用多少的内存? 3.Bitmap 如何处理大图,如一张 30M 的大图,如何预防 OOM? A...

Android_SE的博客 1万+
上一篇: 带你手把手重读 Handler 源码,聊聊那些你所不知道一二三
下一篇: Android多线程断点续传下载原理及实现
初壹十五a
博客等级 码龄8年 146粉丝 257原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值