【深圳信狮】Android 性能调优点

时间:2016-01-27 11:19:11
分享到:
导读:1 同步改异步 这个就不用多讲了,耗时操作放在线程中执行防止占用主线程,一定程度上解决anr。但需要注意线程和service结合(防止acti
1. 同步改异步
    这个就不用多讲了,耗时操作放在线程中执行防止占用主线程,一定程度上解决anr。
但需要注意线程和service结合(防止activity被回收后线程也被回收)以及线程的数量
线程池使用可见java的线程池
2. 缓存
    java的对象创建需要分配资源较耗费时间,加上创建的对象越多会造成越频繁的gc影响系统响应。主要使用单例模式、缓存(图片缓存、线程池、View缓存、IO缓存、消息缓存、通知栏notification缓存)及其他方式减少对象创建。
(1). 单例模式
    对于创建开销较大的类可使用此方法,保证全局一个实例,在程序运行过程中该类不会因新建额外对象产生开销。示例代码如下:
<font face="宋体" size="3">public class Singleton {  
   
    private static Object    obj      = new Object();  
    private static Singleton instance = null;  
   
    private Singleton(){  
    }  
   
    public static Singleton getInstance() {  
        // if already inited, no need to get lock everytime  
        if (instance == null) {  
            synchronized (obj) {  
                if (instance == null) {  
                    instance = new Singleton();  
                }  
            }  
        }  
   
        return instance;  
    }  
}  </font>
(2). 缓存
    程序中用到了图片缓存、线程池、View缓存、IO缓存、消息缓存、通知栏notification缓存等。
a. 图片缓存:见ImageCache和ImageSdCache
b. 线程池:使用Java的Executors类,通过newCachedThreadPool、newFixedThreadPool、newSingleThreadExecutor、newScheduledThreadPool提供四种不同类型的线程池
c. View缓存:
可见ListView缓存机制

listView的getView缓存
 

通过convertView是否为null减少layout inflate次数,通过静态的ViewHolder减少findViewById的次数,这两个函数尤其是inflate是相当费时间的

d. IO缓存:

使用具有缓存策略的输入流,BufferedInputStream替代InputStream,BufferedReader替代Reader,BufferedReader替代BufferedInputStream.对文件、网络IO皆适用。

e. 消息缓存:通过 Handler 的 obtainMessage 回收 Message 对象,减少 Message 对象的创建开销

handler.sendMessage(handler.obtainMessage(1));

f. 通知栏notification缓存:下载中需要不断改变通知栏进度条状态,如果不断新建Notification会导致通知栏很卡。这里我们可以使用最简单的缓存

Map<String, Notification> notificationMap = new HashMap<String, Notification>();如果notificationMap中不存在,则新建notification并且put into map.

(3). 其他
能创建基类解决问题就不用具体子类:除需要设置优先级的线程使用new Thread创建外,其余线程创建使用new Runnable。因为子类会有自己的属性创建需要更多开销。
控制最大并发数量:使用Java的Executors类,通过Executors.newFixedThreadPool(nThreads)控制线程池最大线程并发

对于http请求增加timeout

3. Layout优化
使 用抽象布局标签(include, viewstub, merge)、去除不必要的嵌套和View节点、减少不必要的infalte及其他Layout方面可调优点,顺带提及布局调优相关工具 (hierarchy viewer和lint)。具体可见性能优化之布局优化

TextView属性优化:TextView的android:ellipsize=”marquee”%%灯效果极耗性能,具体原因还在深入源码中

4. 数据库优化

主要包括索引和事务及针对Sqlite的优化。具体可见性能优化之数据库优化

5. 算法优化

这个就是个博大精深的话题了,只介绍本应用中使用的。

使用hashMap代替arrayList,时间复杂度降低一个数量级

6. 延迟执行
    对于很多耗时逻辑没必要立即执行,这时候我们可以将其延迟执行。
线程延迟执行 ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(10);
消息延迟发送 handler.sendMessageDelayed(handler.obtainMessage(0), 1000);
  • 人生无处不套路,比如就业面试,大家可能就中了不少HR的套路,有时候一天面试好几家公司,自我感觉良好,HR总是叫你回家等消息,可是左等右

  •   在电脑技术兴盛的今天,JAVA语言得到了最广泛的应用,从网站建设、电子商务、游戏开发、移动互联网等,JAVA语言技术在其中所站的开发份

  •   对于高中毕业生来说,刚刚走出校园大门,学历不高且没有工作经验,想找份赚钱多的工作,该怎么做呢?2017年高中毕业不上大学,学什么专业

  • 怎么成为一个软件开发者?电脑编程技术为何让90后宅男疯迷?软件开发电脑编程技术成90后高薪就业技术。我们知道如今软件工程师非常抢手,尤

  • 作为职业教育学校,在人才培养上,不只是进行简单的教学,更应侧重学生的动手实践、创新发展。尤其在新时代,企业对人才的要求更高。北大青

  •   随着软件测试行业的逐渐发展,性能测试也变得火热起来。从各大测试论坛和测试交流群的交流主题的热门程度来看,性能测试已经成为大家非

  • 随着电子时代的来临,电脑早已成为人们生活、学习、工作、娱乐不可或缺的工具。电脑办公、手机上网、聊天娱乐、网上购物、用网银办理各种付

  •       就业作为一个老生常谈的问题,已经不算新鲜,但是每一年还是在毕业季大量毕业生涌入人才市场寻找工作时成为一时热门话题。人们

  • 深圳有什么好的JAVA培训学校?教JAVA 技术的机构有很多,如何知道这些培训学校好不好呢?我们先来分析下,目前IT行业比较突出的问题是实战型精英人才的缺乏,面对琳琅满目的JAVA培训学校

  • 安卓开发新手容易陷入的误区都有哪些?Android平台是一个新手最广为人知的平台。它不仅是一个廉价的工具,而且有着良好的开发社区,以及从

  • 陈*东:梦想照进现实,奋力前行

    姓名:陈*东班级:JT29班学历:大专年龄:23就业企业:云奥贸易就业岗位:开发工程师就业薪资:8000我,曾是一个刚离开校园的毕业生,怀揣

  • 李*同学:一技在身,实现人生的翻转

    中专毕业后,追求发展的我,便在各个行业中辗转,发现社会上、生活中太多残酷的现实,远没以前上学那会儿想得那么理想。我学历不高、没有一技之长,生存都有些不容易,更别谈发展。出

  • 陈*喜:很庆幸我选择的是北大青鸟

    高中毕业后我就想着学个技术,很庆幸我选择的是深圳信狮学校学软件工程师技术。感谢老师对我的支持与鼓励,以及长期以来的帮助,让我在信狮学校度过了一段非常充实而有意义的学习生活

  • 石柱:走好每一步,干好每一件事情

    姓名:石柱年龄:19岁学历:大专就职企业:深圳市网合科技有限公司就职岗位:Java软件工程师就业薪资:4000元公司简介:深圳市网合科技股份

  • 万*:青春,就是用来奔跑的

    来信狮前,我的情况是高中毕业,IT技能零基础,在工厂做了3年普工,拿着每月的血汗钱工资,听着周边同事的各种抱怨、各种对生活的失望、或

热点专题 更多 >
热门标签 更多 >