ndroid11道一性能优化面试题

  介绍

本篇文章给大家分享的是有关ndroid11道一性能优化面试题,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。


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

    <李>参考回答:
      <李>

      首先我们要清楚图片的三级缓存是如何的

        

       ndroid11道一性能优化面试题

        

      如果内存足够时不回收。内存不够时就回收软引用对象

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

    <李>参考回答:
      <李> <强>不考虑屏幕比的话:占用内存=500 * 500 * 4=1000000 b≈0.95 mb李 <李> <强>考虑屏幕比的的话:占用内存=宽度像素(inTargetDensity/强度)x高度像素(inTargetDensity/强度)x一个像素所占的内存字节大小李

强度表示目标图片的dpi(放在哪个资源文件夹下),inTargetDensity表示目标屏幕的dpi

 ndroid11道一性能优化面试题

3, WebView的性能优化?

    <李>参考回答:
      <李>一个加载网页的过程中,本地,网络,后端处理,CPU都会参与,各自都有必要的工作和依赖关系,让他们相互并行处理而不是相互阻塞才可以让网页加载更快:
        <李> <强> WebView初始化慢,可以在初始化同时先请求数据,让后端和网络不要闲着。 <李> <强>常用JS本地化及延迟加载,使用第三方浏览内核 <李> <强>后端处理慢,可以让服务器分树干输出,在后端计算的同时前端也加载网络静态资源。 <李> <强>脚本执行慢,就让脚本在最后运行,不阻塞页面解析。 <李> <强>同时,合理的预加载,预缓存可以让加载速度的瓶颈更小。 <李> <强> WebView初始化慢,就随时初始化好一个WebView待用。 <李> <强> DNS和链接慢,想办法复用客户端使用的域名和链接。

         ndroid11道一性能优化面试题

4,位图如何处理大图,如一张30米的大图,如何预防伯父吗?

    <李>参考回答:避免伯父的问题就需要对大图片的加载进行管理,主要通过缩放来减小图片的内存占用。
      <李> BitmapFactory提供的加载图片的四类方法(<强> decodeFile、decodeResource decodeStream, decodeByteArray )都支持BitmapFactory。选择参数,通过inSampleSize参数就可以很方便地对一个图片进行采样缩放 <李>比如一张1024 1024的高清图片来说。那么它占有的内存为1024 1024 4,即4 mb,如果inSampleSize为2,那么采样后的图片占用内存只有512 512 4,即1 mb ( 注意:根据最新的官方文档指出,inSampleSize的取值应该总是为2的指数,即1,2,4,8等等,如果外界输入不足为2的指数,系统也会默认选择最接近2的指数代替,比如2 *) <李>综合考虑。通过采样率即可有效加载图片,流程如下
        <李> <强>将BitmapFactory.Options的inJustDecodeBounds参数设为true并加载图片 <李> <强>从BitmapFactory.Options中取出图片的原始宽高信息,它们对应outWidth和outHeight参数 <李> <强>根据采样率的规则并结合目标视图的所需大小计算出采样率inSampleSize <李> <强>将BitmapFactory。Options的inJustDecodeBounds参数设为false,重新加载图片

        ndroid11道A性能优化面试题

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

  • 参考回答:
    • 内存判定对象可回收有两种机制:
      • 引用计数算法:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时刻计数器为0的对象就是不可能再被使用的。然而在主流的Java虚拟机里未选用引用计数算法来管理内存,主要原因是它难以解决对象之间相互循环引用的问题,所以出现了另一种对象存活判定算法。
      • 可达性分析法:通过一系列被称为『GCRoots』的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为

        ndroid11道一性能优化面试题