美文网首页
【Android性能优化面试题】当前项目中是如何进行性能优化分析

【Android性能优化面试题】当前项目中是如何进行性能优化分析

作者: 小城哇哇 | 来源:发表于2023-10-30 19:53 被阅读0次

当前项目中是如何进行性能优化分析的

这道题想考察什么?

  1. 是否了解android性能优化
  2. 是否了解性能优化的常规步骤

考察的知识点

  1. android性能优化的分类
  2. android性能优化的具体操作

考生应该如何回答

第一、布局优化

  • UI渲染机制

要想做好布局优化,首要要了解AndroidUI渲染机制;在Android中,系统是通过VSYNC信号触发对UI渲染,重绘,其间隔是16ms(毫秒);16毫秒的来历就是1000ms中显示60fps(帧)画面的单位时间,即1000/60约等于16毫秒;人眼所感觉的流畅画面是每秒需要显示40到60帧;

例如一次绘制任务需要25毫秒,那么在16毫秒系统VSYNC信号时还没有完成绘制,该帧就会被丢弃,等待下次信号才开始绘制,导致2*16ms 内都是显示同一帧画面,这就是卡顿的原因;

  • 减少布局层级

布局优化的思想很简单,就是减少布局的层级;能试用LinearLayout和FrameLayout布局,就不使用RelativeLayout布局,因为RelativeLayout的功能比较复杂,它的布局过程需要花费根多的CPU时间;但是如果使用LinearLayout使布局层级变多的话,尽量使用RelativeLayout布局减少层级,如果可以的话;或者使用ConstraintLayout(约束布局)减少层级嵌套;

  • 使用include 、merge 、ViewStub标签

<include>标签主要作用是:布局重用;

<include layout = "@layout/titlebar">

注意事项:支支持android:layout_开头的属性(android:id属性除外),比如android:layout_width、android:layout_height;而且如果include标签指定了android:layout_*属性,那么android:layout_width、android:layout_height必须存在;

<merge>标签主要作用:和include标签配合使用减少布局的层级;merge的布局取决于父控件是哪个布局,使用merge相当于减少了自身的一层布局,直接采用父include的布局;

<ViewStub>标签主要作用:延迟加载,按需加载布局;是个轻量级的View,且宽高为0;
第二、绘制优化

  • 避免过度绘制

移除重复的背景色、移除子View多余的背景色

  • View的onDraw方法要避免执行大量的操作

一方面onDraw方法中不要创建新的局部变量,因为onDraw方法可能会被平凡的调用,这样就会产生大量的临时的对象;另一方面,onDraw方法中不要做耗时的任务,也不要执行上万次的循环,不然会造成View绘制过程的不流畅。

第三、内存优化

通常所说的内存是指手机RAM,主要包括:寄存器,栈(Stack),堆(Heap),静态存储区,常量池;

  • Bitmap优化

使用适当分辨率和大小的图片,使用图片缓存;对图片进行压缩;

  • File,Receiver,Cursor等对象,注意使用后释放掉;
  • 使用SurfaceView替代View进行大量,频繁的绘制操作;
  • 属性动画开启之后,记得在关闭页面的时候停止动画;
  • 减少使用不必要的成员变量;

第四、线程优化

线程优化一般采用线程池替代线程的方法;这样避免程序中存在大量的线程,也避免了创建销毁线程所带来的性能开销;

第五、启动速度优化

  • 设置闪屏图片主题
   <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="android:windowFullscreen">true</item>
        <item name="android:windowIsTranslucent">true</item>
    </style>
  • 任务异步加载处理

最后

有需要面试题的朋友可以关注一下哇哇,以上都可以分享!!!

相关文章

网友评论

      本文标题:【Android性能优化面试题】当前项目中是如何进行性能优化分析

      本文链接:https://www.haomeiwen.com/subject/cmabidtx.html