美文网首页
Android 性能优化

Android 性能优化

作者: tommy_yong | 来源:发表于2017-11-23 08:57 被阅读0次

    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

    相关文章

      网友评论

          本文标题:Android 性能优化

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