Android性能优化记录

ListView 性能优化:
1.使用RecyclerView,使用ViewHolder
2.为了提高流畅度,在滑动的时候不显示大图
3.将ListView的scrollingCache和animateCache设置为false
4.降低Item的布局层次
5.避免在getView中处理太多的逻辑和运算

Main Looper 响应优化:
1.使用HandlerThread 来分担UI线程的压力
2.使用IntentService 代替Service
3.避免重复inflate,可以对inflate做缓存
4.在自定义View内处理逻辑过多的时候,可以尝试使用SurfaceView来代替View
5.在操作耗时的逻辑时使用Thread或者HandlerThread处理,对现成过多的情况下可以考虑线程池来复用线程
6.酌情使用缓存,复用,对象池。
7.优化数据结构和执行算法
8.尽可能的使用jni来实现一些逻辑和算法
9.使用Window Background ViewStub 来提升启动速度。
10.为UI提供更多更丰富的loading来过渡耗时的网络请求
11.自定义View的时候不要在onDraw中做耗时的操作同时也要避免过度的GC(尽可能的减少对new 的使用)

布局优化:
1.避免过度绘制(对于过度绘制的部分可以使用裁剪处理),可以使用Android自带的系统工具查看绘制情况
2.优化布局层次
3.避免无用的布局嵌套
4.include 重用布局
5.使用Hierarchy View进行布局层次分析
6.使用ViewStup标签来做动态加载
7.酌情使用merge标签来减少布局层次
8.减少不必要的硬件缩放,尽可能的提供更完整的分辨率资源
9.让布局和View更简单(Icon 与 Text)

网络优化:
1.如果条件允许,尽可能的使用C++ Socket来处理一些合适的服务器通信
2.当需要批量的网络请求时,尽可能的做同步处理避免创建过多的线程
3.将传输的json/xml等数据进行压缩(可提高网络传输效率提升用户体验)
4.使用增量更新解决大数据更新的问题(比如更新App,同步大数据库)
5.将更多的耗时任务分布式管理(比如说预初始化,当你有大的耗时并且频次较高的任务,可以分布在其他不耗时的时机去做,把握好时机最重要)
6.善用第三方网络请求框架

内存优化:
1.避免内存抖动(在同一时间内大量申请内存)
2.使用Lru或者WeakRef来管理大的内存(例如Bitmap)
3.在使用Bitmap时尽可能的进行采样率或者尺寸压缩(图片压缩可采用C++的赫夫曼压缩方式)
4.酌情使用Bitmap的色彩模式ARGB_8888适合显示更丰富的色彩 ARGB_4444适用在用户分辨模式较低的情景,但是在一些场合可以节省很大的内存开销。
5.在合适的情况下可以考虑使用SparseArray,ArrayMap来代替Java的一些数据结构。
6.避免在Hander或者Thread中对Context的引用,如果能用ApplicationContext代替更好,如果不能最好做Weak或者Lru的处理
7.合理利用static final 修饰符
8.在一些合适的场合下尽可能的使用svg来代替png图片
9.减少不必要的全局变量
10.谨慎管理单利类的成员和内存(Context 是否可以使用ApplicationContext,加强对单利中的缓存池的管理,比如说List<Lisenter>,有add就要有remove)
11.避免创建不必要的对象(StringBuilder 在字符串拼装时优于'+')
12.避免使用过多的枚举
13.for循环中采用c的分离方式设计(for(int i;xx.getSize();i++)) getSize 可以被分离,考虑是否可以使用for-each。
14.合理使用第三方的处理类库
15.对数据库对象的操作要谨慎比如Cursor对象
15.对于IO流操作要谨慎,及时close
16.尝试使用静态内部类代替内部类
17.尽可能的选用一些C++优秀的开源项目来提升性能和内存
18.当需要处理gif图片时就可以尝试使用libgif的C++开源项目渲染
19.尝试变更App的布局方式(可能要与产品沟通实现方案,尽量避免ViewPager嵌套ViewPager,TabCard嵌套TabCard这种需求)
20.在做数据转移时尝试是否可以使用System.arraycopy()
21.尽可能的使用Java代码来写布局
22.检查你得广播中是否有一些恶性的代码?还有是否解除了广播关系

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

推荐阅读更多精彩内容