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

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、对Cursor、Receiver、File等对象,要注意回收和取消注册

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

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

9、避免使用反射

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

总结

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

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

时间: 2024-10-25 21:09:30

浅析安卓(Android)的性能优化的相关文章

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

Android性能的优化主要分为两点 1.布局优化 2.内存优化 布局优化 首先来看一下布局优化,系统在渲染UI的时候会消耗大量的资源,所以,对布局的优化就显得尤为重要 避免Overdraw 也就是避免过度的绘制,过度的绘制会浪费更多的资源,举个例子,Android系统会默认绘制Activity的背景,这时候我们再设置一个背景,这样默认的背景就属于过度绘制了,在『开发者工具』中有一个『调试GPU过度绘制』的选项,我们打开就可以通过颜色来判断过度绘制的次数 如图: 所以说我们尽可能的增大蓝色区域,

Android应用性能优化最佳实践.

移动开发 Android应用性能优化最佳实践 罗彧成 著 图书在版编目(CIP)数据 Android应用性能优化最佳实践 / 罗彧成著. -北京:机械工业出版社,2017.1 (移动开发) ISBN 978-7-111-55616-9 I. A- II. 罗- III. 移动终端-应用程序-程序设计 IV. TN929.53 中国版本图书馆CIP数据核字(2016)第315986号 Android应用性能优化最佳实践 出版发行:机械工业出版社(北京市西城区百万庄大街22号 邮政编码:100037

[Android]ListView性能优化之视图缓存(续)

前言 在上一篇ListView性能优化之视图缓存我们讨论了Google I/O中的优化方法,在各个论坛发帖后得到了不错的反馈,诸如:使用ViewHolder技术Tag的问题,利用HashMap自行存储的方案等.这里结合新浪微博中主界面的做法及测试数据与大家进一步探讨.   声明 欢迎转载,但请保留文章原始出处:)  博客园:http://www.cnblogs.com 农民伯伯: http://over140.cnblogs.com    文章 [Android]ListView性能优化之视图缓

分享 Android 开发性能优化的技术要点

Android性能调优涉及到多方面的工作,因本人技术水平有限,目前只总结了以下部分,希望大家继续补充. 要点 使用异步     保持 APP 的高度响应,不要在 UI 线程做耗时操作,多使用异步任务    使用线程时要做好线程控制:使用队列.线程池    谨慎使用糟糕的 AysncTask . Timer    警惕异步任务引起的内存泄露    应该异步任务分类,比如 HTTP ,图片下载,文件读写,每一类的异步任务维护一个任务队列,而不是每一个任务都开一个线程( Volley 表示我一个可以搞

Android开发性能优化总结

一. 加载 预加载:1.反射注解框架Reflect信息,在Application内多线程预加载至缓存.2.资源预加载 懒加载:1.Fragment懒加载2.资源懒加载 二. 缓存 1. Http缓存,淘汰时间 2. 图片缓存,bitmap压缩,Lru淘汰,持久化二级缓存 3. 反射注解框架Reflect信息缓存,防止多次反射操作 三. 异步防止Anr 1. 避免在UI线程做太多耗时操作,IntentReceiver > 10s Anr 2. 并发操作多用读写锁,少用synchronized,An

Android布局性能优化之按需加载View

有时应用程序中会有一些很少用到的复杂布局.在需要它们的时候再加载可以降低内存的消耗,同时也可以加快界面的渲染速度. 定义ViewStub ViewStub是一个轻量级的View,它没有高宽,也不会绘制任何东西.所以它的加载与卸载的成本很低.每个ViewStub都可以使用android:layout属性指定要加载的布局. 下面这个ViewStub用于一个半透明的ProgressBar的加载.它只有在新工作开始时才会显示. <ViewStub android:id="@+id/stub_imp

Android应用性能优化实践

何杰:UC优视Android技术负责人,专注Android平台应用开发方向:主导过UC浏览器的性能.内存.稳定性.网络优化,增量升级技术攻关,插件平台搭建:目前负责Android UC浏览器的架构优化. Android应用的卡顿问题非常突出,所有用户都能感觉得到却又很难做量化卡顿的严重程度,过去的做法只是零星地发现和解决一些小点.DAU超亿级的 UC浏览器在卡顿优化的过程中建立了一套衡量卡顿严重性的数据指标与监控分析机制,并藉此有针对性地落实了200+个性能优化点.下面会介绍卡顿监控与分析的方法

Android应用性能优化最佳实践.2.5 启动优化

2.5 启动优化 随着应用的功能越来越丰富.启动时需要初始化的工作多.界面的元素复杂等,启动速度不可避免地受到影响,比如一开始单击时出现黑屏或者白屏,甚至在低端机型上出现假死的现象,本节通过学习应用的启动流程.启动速度的监控,发现影响启动速度的问题所在,并优化启动的逻辑,提高应用的启动速度. 2.5.1 应用启动流程 Android应用程序的载体是APK文件,其中包含了组件和资源,APK文件可能运行在一个独立的进程中,也有可能产生多个进程,还可以多个APK运行在同一个进程中,可以通过不同的方式来

Android应用性能优化最佳实践.1.2 Android Studio使用入门

1.2 Android Studio使用入门 1.2.1 Android Studio安装 这里我们以在Windows系统上安装Android Studio为例,具体的安装步骤如下: 1)安装JDK,且为JDK 1.6及以上版本. 2)下载Android Studio安装包:developer.android.com/sdk/installing/studio.html. 3)单击安装包开始安装,首先进入选择组件界面,如图1-1所示.   图1-1 选择安装组件 一般已经安装Eclipse或其他