浅析安卓(Android)的性能优化

所属分类: 软件编程 / Android 阅读数: 45
收藏 0 赞 0 分享

Android性能的优化主要分为两点

1、布局优化

2、内存优化

布局优化

首先来看一下布局优化,系统在渲染UI的时候会消耗大量的资源,所以,对布局的优化就显得尤为重要

避免Overdraw

也就是避免过度的绘制,过度的绘制会浪费更多的资源,举个例子,Android系统会默认绘制Activity的背景,这时候我们再设置一个背景,这样默认的背景就属于过度绘制了,在『开发者工具』中有一个『调试GPU过度绘制』的选项,我们打开就可以通过颜色来判断过度绘制的次数

如图:

所以说我们尽可能的增大蓝色区域,减少红色区域

优化布局层级

在Android系统中,系统对View进行测量、布局、绘制的时候,都是通过对View树的遍历来进行的,所以说一个布局的层级太多,就会严重影响测量、布局、绘制的速度,所以要降低View树的高度,Google在文档中建议布局的层级不超过10层,所以还要避免嵌套没有用的布局

使用include标签

相信大家都会在项目的时候遇到toolbar,或者一个UI在多个界面使用的问题,遇到这种问题的时候我们一般都会用include(毕竟大神『第一行代码』教的好),这样就减少了代码冗余,而且还利于后期更改

使用ViewStub实现View的延时加载

ViewStub标签和View.GONE的方式差不多,但是ViewStub只会在显示的时候去渲染,而GONE在初始化的时候就已经渲染完毕了,所以相比来说ViewStub的效率更高。

下面来通过代码使用一下ViewStub

首先我们定义一个布局文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical" android:layout_width="match_parent"
 android:layout_height="match_parent">

 <TextView
  android:id="@+id/tv"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content" />

</LinearLayout>

这里面只放了一个TextView,然后我们在自己的布局中通过ViewStub来引用他

<Button
 android:id="@+id/btn"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content" />

<ViewStub
 android:id="@+id/vs"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout="@layout/view_stub"/>

这里的逻辑是点击按钮然后出现ViewStub引用的布局(也就是我们上面写的那个布局文件)

findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
 @Override
 public void onClick(View view) {
  ViewStub vs = (ViewStub) findViewById(R.id.vs);
  View vsView = vs.inflate();
  TextView tv = (TextView) vsView.findViewById(R.id.tv);
  tv.setText("hahaha");

 }
});

这里想要把ViewStub引用的布局显示出来有两种办法,一种是ViewStub.setVisibility();另一种就是ViewStub.inflate();这两种方法的区别就是inflate()能返回引用的布局,然后可以通过这个布局来找到里面的子View来进行操作

运行程序点击按钮,就可以看到TextView已经显示出来了,并且已经赋值『hahaha』

Hierarchy Viewer

这个工具可以显示我们的布局,但是只可以在模拟器和工厂的Demo机上用,不过Google的大神提供了一个开源的项目ViewServer,有兴趣的可以看一下。

这个就不过多阐述了,有兴趣的可以自行查看一下相关的资料

内存优化

我们都知道,最近Android的厂商就是在拼配置,其中我们最关注的就是内存几个G,但是Android手机有的内存很大,但是很卡,这是因为有的手机软件在手机内存低的情况下不能被杀死,也就是我们说的『防杀』

我们知道内存一般分为这几个部分

     1、寄存器

     2、栈

     3、堆

     4、静态存储区

     5、常量池

其中寄存器运算速度最快,但是我们在程序里无法控制

栈里存放基本数据类型

堆里存放对象和数组,在堆中的一般由Java的GC还管理

静态存储区在固定的位置存放应用程序中运行时一直存在的数据,Java专门划分了一个区域来管理静态变量

常量池就是该类型所使用到的常量的集合

Bitmap的优化

我们都知道在Android中是造成OOM的最大威胁,因为它占用的内存特别多,所以我们应该:

1、使用适当分辨率大小的图片

由于Android在做适配的时候会对不同分辨率的文件夹下的图片来进行缩放适配,如果图片的分辨率与资源分辨率不匹配的话就会导致消耗更多的资源

2、使用缓存

一般有内存缓存和硬盘缓存

代码优化

     1、对常量使用static

     2、使用静态方法,静态方法比普通方法提高15%左右的访问速度

     3、减少没有必要的成员变量,如果能定义成局部变量就最好定义成局部变量

     4、减少不必要的对象

     5、少用枚举、迭代器

     6、对CursorReceiverFile等对象,要注意回收和取消注册

     7、使用SurfaceView来代替View进行大量并且频繁的绘图操作

     8、尽量使用视图缓存,不是每次都执行inflate()来解析视图

     9、避免使用反射

     10、使用RenderScriptOpenGL来进行非常复杂的绘图操作

以上就是对Android性能优化的一些点,如果你用AndroidStudio的话,AndroidStudio提供了一个内存监视的工具,还是很好用的,如果你没用AndroidStudio,那么我建议你使用AndroidStudio~

另外优化也没有绝对的完美,每一次优化都是基于当前的环境来做的,要明白沟通是最好的优化,不盲从,不随便,三思而后行。希望这篇文章对大家开发Android能有所帮助。

更多精彩内容其他人还在看

Android设计登录界面、找回密码、注册功能

这篇文章主要为大家详细介绍了Android设计登录界面的方法,Android实现找回密码、注册功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android通过手势实现答题器翻页效果

这篇文章主要为大家详细介绍了Android通过手势实现答题器翻页效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android采用双缓冲技术实现画板

这篇文章主要为大家详细介绍了Android采用双缓冲技术实现画板的相关资料,思路清晰,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android开发之毛玻璃效果实例代码

这篇文章主要给大家分享android开发之毛玻璃效果的实例代码,非常具有参考借鉴价值,感兴趣的朋友一起学习吧
收藏 0 赞 0 分享

Android实现桌面悬浮窗、蒙板效果实例代码

这篇文章主要介绍了Android实现桌面悬浮窗、蒙板效果实例代码的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

深入解读Android的Volley库的功能结构

这篇文章主要介绍了Android的Volley开发框架的功能结构,Volley是Android开发中网络部分的一大利器,包含很多HTTP协议通信的相关操作,需要的朋友可以参考下
收藏 0 赞 0 分享

Android开发中使用Volley库发送HTTP请求的实例教程

这篇文章主要介绍了Android开发中使用Volley库发送HTTP请求的实例教程,包括创建Volley单例的基本知识与取消Request请求的技巧等,需要的朋友可以参考下
收藏 0 赞 0 分享

Android仿QQ聊天撒花特效 很真实

本文写的这个特效,是关于聊天的,你肯定遇到过,就是你跟人家聊天的时候,比如发送应(么么哒),然后屏幕上全部就是表情了,今天我们就是做这个,撒花的特效,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android的HTTP操作库Volley的基本使用教程

这篇文章主要介绍了Android的HTTP操作库Volley的基本使用教程,包括JSON请求与图片加载等用法的实例,需要的朋友可以参考下
收藏 0 赞 0 分享

Android仿水波纹流量球进度条控制器

这篇文章主要介绍了Android仿水波纹流量球进度条控制器的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享
查看更多