Android 性能优化

Android 性能优化

1.Hugo工具

做项目的时候有时候需要打印方法的传参和返回值,甚至方法的执行时间,有没有一种简单方便通用的方式去做这个呢,Hugo就可以。

2.启动优化

1).避免在启动时做密集沉重的初始化。Application 的oncreate()方法中异步处理耗时操作。

3.布局优化

1).减少嵌套层次及控件个数,保持view的树形结构尽量扁平(使用Hierarchy Viewer可以方便的查看),同时移除所有不需要渲染的view;

2).使用GPU配置渲染工具,定位出问题发生在具体哪个步骤,使用TraceView精准定位代码;

Android 代码审查

4.内存优化

a:内存泄漏:对于Java来说,就是new出来的Object 放在Heap上无法被GC回收(内存中存在无法被回收的对象);内存泄漏发生时的主要表现为内存抖动,可用内存慢慢变少。

1).LeakCanary检测内存泄漏

LeakCanary是square出品的一个检测内存泄漏的库,集成到App之后便无需关心,在发生内存泄漏之后会Toast、通知栏弹出等方式提示,可以指出泄漏的引用路径,而且可以抓取当前的堆栈信息供详细分析。

2.)内存泄漏优化

在Android中很多的内存泄露都是由于在Activity中使用了非静态内部类导致的,就像本文提到的一样,所以当我们使用时要非静态内部类时要格外注意,如果其实例的持有对象的生命周期大于其外部

类对象,那么就有可能导致内存泄露。

b:内存溢出:Android系统的每个进程都有一个最大内存限制,如果申请的内存资源超过这个限制,系统就会抛出OOM错误。

5.避免应用卡顿

1).将耗时操作移到异步中

类如I/O读写、数据库访问等都应该采用异步的方式,不能有“只是一个很小的文件”之类的想法,防微杜渐;

2).合理优化布局,避免OverDraw。

同样的实现功能界面,不同的布局方式产生的View个数以及渲染耗时差异是数倍的,恐怖的差异.

3).合理优化内存

节省内存的分配空间,尽可能的降低GC的频率,缩短GC的平均时间;CPU不被占用,卡顿的几率就会更低;

4).正确使用异步

耗时操作不能都直接随意交给异步,不正确的异步使用方式反而会加剧卡顿;

6.异步处理任务

1).最重要的两个线程优先级是default和background。线程的优先级应该根据线程的工作量谨慎选择,简单来说,

线程优先级应该和该线程期望完成的工作量相反。线程做的工作越多,它的优先级应该越小,以便它不会造成系统资源紧张。

所以,UI线程(Activity的主线程)通常是default优先级,然而后台线程(AsyncTask的线程)通常是background优先级。

2).Thread、AsyncTask适合处理单个任务的场景;

HandlerThread适合串行处理多任务的场景;

IntentService适合处理与UI无关的多任务场景;

当需要并行的处理多任务之时,ThreadPoolExecutor是更好的选择,当然也可以使用AsyncTask传入自定义的线程池;

注意线程优先级的设置;

特别注意对不同场景下异步方式的选择。

3)线程池的使用

线程池的优点有:

(1)复用线程池中的线程,避免因为线程的创建和销毁所带来的性能开销。

(2)能够有效的控制线程池的最大并发数,避免大量的线程之间因互相抢占系统资源而导致的阻塞现象。

(3)能够对线程进行简单的管理,并提供定时执行以及指定间隔循环执行等功能。

1.插件代码自动审查

Alibaba Java Coding Guidelines

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容