zoukankan      html  css  js  c++  java
  • Andriod性能优化笔记

    布局优化

    布局优化的思想很简单,就是尽量减少布局文件的层级。

    如何进行布局优化呢?首先是删除布局中无用的空间和层级,其次有选择地使用性能较低的 ViewGroup,比如 RelativeLayout 的性能比起 LinearLayout 和 FrameLayout 就不是很好。

    利用 RelativeLayout 可以减少嵌套,因为嵌套意味着增加了布局的层级。

    另外,还可以使用以下几个标签

    • 标签

      布局重用

    • 标签

      减少布局层级

    • ViewStub

      按需加载

    绘制优化

    绘制优化是指 View 的 onDraw 方法要避免执行大量的操作。体现在两个方面

    • onDraw 中不要创建新的局部对象

      如果 onDraw 被频繁调用,会在一瞬间产生大量临时变量,会占用过多内存和导致频繁 GC。

    • onDraw 中不要做耗时任务,也不能执行成千上万次的循环操作

      View 的绘制帧率保持在 60 fps 是最佳的

    内存泄漏优化

    常见例子:

    • 静态变量导致的内存泄漏

      public class MainActivity extends Activity {
      	
        	private static Context sContext;
      
      	public void onCreate(Bundle savedInstanceState) {
            	super.onCreate(savedInstanceState);
        		...
              
      		sContext = this;
      	}
      }
      
      public class MainActivity extends Activity {
      	
        	private static View sView;
      
      	public void onCreate(Bundle savedInstanceState) {
            	super.onCreate(savedInstanceState);
        		...
              
              sView = new View(this);
      	}
      }
      
    • 单例模式导致的内存泄漏

      Activity 实现某个接口并向单例 Test 注册监听。由于缺少解注册的操作所以会引起内存泄漏。因为 Activity 的对象被单例 Test 所持有,而单例模式的特点是生命周期和 Application 保持一致。因此 Activity 的对象无法被及时释放。

    • 属性动画导致的内存泄漏

      属性动画中有一类无限循环动画,如果没有在 onDestroy() 中停止动画,那么动画会一直播放下去,尽管已经无法在界面上看到动画效果了。而且这个时候,Activity 的 View 被动画持有,而 View 又持有了 Activity,最终 Activity 无法被释放。

      解决办法:在 Activity 的 onDestroy 中调用 animator.cancel() 来停止动画。

    响应速度优化

    核心思想是避免在主线程中做耗时操作。否则就会出现 ANR。

    ANR 发生的时候,系统会在 /data/anr 目录下创建一个文件 traces.txt,可以利用 MAT 来分析这个文件找出原因。

  • 相关阅读:
    06springmvc文件上传
    07springmvc文件下载
    05springmvc-json-ajax使用
    04springmvc请路径参数
    03springmvc项目使用静态资源
    02springmvc注解入门
    springmvc入门
    20mybatis集成jndi
    19mybatis集成dbcp
    怎样用hibernate验证登陆界面的用户名和密码
  • 原文地址:https://www.cnblogs.com/okadanana/p/5914639.html
Copyright © 2011-2022 走看看