Android的性能优化

我的简书:https://www.jianshu.com/u/c91e642c4d90
我的CSDN:http://blog.csdn.net/wo_ha
我的GitHub:https://github.com/chuanqiLjp
我的个人博客:https://chuanqiljp.github.io/

版权声明:商业转载请联系我获得授权,非商业转载请在醒目位置注明出处。

1、布局优化

  1. 使用Lint(AS -> Analyze -> Inspect code) — 查看你的view 层级哪些地方可以优化;
  2. 删除布局中无用的控件和层级;
  3. 使用include标签重用布局文件;
  4. 尽量减少内嵌的层级—>可考虑使用merge标签【删减多余的层级】;
  5. 使用ViewStub标签按需加载所需的布局文件;

2、绘制优化

  1. 在onDraw方法中不要创建新的局部变量;
  2. 在onDraw方法不做耗时操作和避免循环;

3、内存泄露优化(MAT分析和LeakCanary分析检测内存泄露)

  1. 单例模式导致的内存泄露 —> 不要持有Activity或Fragment的引用改用Application的Context;
  2. 属性动画导致的内存泄露:开启一个重复的动画没有在onDestroy中停止播放;
  3. 非静态内部内的静态实例,非静态内部类会维持一个到外部类实例的引用,如果非静态内部类的实例是静态的,就会间接长期维持着外部类的引用,阻止被回收掉,可以使用静态内部类和WeakReference代替。
  4. 资源对象未关闭,资源性对象如Cursor、File、Socket,应该在使用后及时关闭。未在finally中关闭;
  5. 注册对象未反注册,未反注册会导致观察者列表里维持着对象的引用,阻止垃圾回收。在必要的地方及时反注册,如广播,EventBus;
  6. Handler临时性内存泄露,一般将Handler定义为静态的,推荐使用静态内部类+弱引用 WeakReference 这种方式,但要注意每次使用前判空
  7. 避免Bitmap的浪费,临时bitmap的主动回收Bitmap,bitmap.recycle();bitmap=null;
  8. 使用软引用保存对象,当内存紧张时会释放,使用弱引用保存对象,当发生GC操作时释放对象
  9. 对象的复用:复用系统的资源,ListView的ConvertView复用,避免在onDraw方法里执行对象的创建
  10. 类的静态变量持有大数据对象,不使用时及时置为null;
  11. Try catch某些大内存的分配的操作;

4、ListView优化

  1. 复用convertView
  2. 缓存item条目的引用,减少findViewbyId—>ViewHolder
  3. 数据的 分页/分批 加载:对大量的数据进行分页展示,对不同的滚动状态进行分别处理,在快速滑动状态不加载数据
  4. 图片的缓存,需要解决图片错位问题—>推荐使用成熟框架Glide或Picasso
  5. 根据列表的滑动状态来控制任务的执行频率(在快速滑动时不要加载图片)
  6. 可以开启硬件加速使ListView更加流畅(android:hardwareAccelerated="true")
  7. 将ListView的scrollingCache和animateCache这两个属性设置为false(默认是true);
  8. 避免GC(可以从LOGCAT查看有无GC的LOG);
  9. 尽可能减少List Item的Layout层次(如可以使用RelativeLayout替换LinearLayout,或使用自定的View代替组合嵌套使用的Layout);

5、Bitmap优化

  1. 避免Bitmap的浪费,临时bitmap的主动回收Bitmap,bitmap.recycle();bitmap=null;
  2. 使用三级缓存,内存-sd卡-网络,将大图片用BitmapFactory压缩采样处理(使用inSampleSize参数)再放到内存中;

6、数据库的优化

  1. 尽量利用原生的SQL语句,原生的SQL省去了拼接sql语句的步骤,要比SqliteDatabase提供的insert、query、 update、delete等函数效率高。当数据库越大,差别也越大;
  2. 当操作条数较多时,利用事务进行批处理,这样SQLite将把全部要执行的SQL语句先缓存在内存当中,然后等到COMMIT的时候一次性的写入数据库,这样数据库文件只被打开关闭了一次,效率自然大大的提高;

7、其他优化

  1. 响应速度优化并避免ANR,分析ANR文件(/data/anr/traces.txt);
  2. 尽量避免使用枚举(枚举占用空间大);
  3. 线程优化:采用线程池避免线程的创建和销毁所带来的性能开销;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 156,907评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,546评论 1 289
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,705评论 0 238
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,624评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,940评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,371评论 1 210
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,672评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,396评论 0 195
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,069评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,350评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,876评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,243评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,847评论 3 231
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,004评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,755评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,378评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,266评论 2 259

推荐阅读更多精彩内容

  • 前言:本章知识不是为具体的一个性能问题提供详细的解决方案,而是梳理和总结Android中性能优化有关的问题,让我们...
    松哦哦阅读 931评论 0 6
  • Android的性能优化 写在前面: 零:性能指标 布局复杂度:布局复杂会导致布局需要更长的时间,从而导致进入应用...
    MeloDev阅读 6,190评论 10 73
  • 所有知识点已整理成app app下载地址 J2EE 部分: 1.Switch能否用string做参数? 在 Jav...
    侯蛋蛋_阅读 2,356评论 1 4
  • PPT 美化专题用来分享一些自己美化 PPT 的心得,在分享的过程中会穿插讲一些设计理论和设计小技巧,冀望各位做演...
    shenxiaoma阅读 3,790评论 1 30
  • 面试,是一场博弈。是一场自我包装,征服对手的战争。 在进入战场前,首先需要知己知彼。知道面试的岗位是什么,去了解对...
    零_bbc8阅读 101评论 0 0