当前位置:主页>科 研>学术交流>

浅议那些Android中的性能优化(2)

图片显示不出来或者加载时间太长,怎么办?分两部分,下载速度,加载速度。

对于下载,要控制好同时下载的最大任务数(平均速度慢),同时给InputStream再包一层缓冲流会更快(如BufferedInputStream)。

对于加载速度,我们要知道一点,虽然下载的图片可能只有几百K,但是decode 成bitmap所占用的内存可是成倍的,尽可能的减小图片size是根本因素,让服务端提供不同分辨率的图片才是最好的解决方案,内存总有耗尽的时刻,别老想着大分辨率会更清晰,实际就只有150*150的空间,非给弄张1000*1000的图片是不恰当的。另外论加载速度:内存>硬盘>网络,合理的使用内存缓存也是关键。假如自己写不好,没关系,有那么多开源的图片缓存框架,不用自己操心。

  再说缓存

有很多种缓存方式,也不用Stay列举了,我们要说的是搭配使用。

比方说,以前我们一直在用强引用,HashMap,后来我们发现占内存,我们就用软引用,弱引用来及时回收,再后来因为回收机制不可控,所以又有了 lrucache,disklrucache通过算法来平衡内存与硬盘缓存。随着android版本的推进与演化,我们也应该拥抱变化。如果你的App里还有软引用,弱引用的地方,不妨再check下。

比方说网络+数据库。网络我们一般都是去主动获取,而非被动接受。那如果说数据是重复的或者未更改的呢?那我们去取一次网络数据有什么意义呢?我的解决方案是给每个activity或 fragment或每个组件设置一个最大请求间隔,比如一个listview,第一次请求数据时,保存一份到数据库,并记下时间戳,当下次重新初始化时,判断是否超过最大时间间隔(如5分钟),如果没有,只加载数据库数据,不需要再做网络请求。当然,还有一些隐式的http请求框架会缓存服务器数据,在一定时间内不再请求网络,或者当服务器返回304时将之前缓存的数据直接返回。

  反正也说到网络了,那我们也来说说

现在有很多现成HTTP框架供我们使用,我们几乎只用写配置就可以搞定一个url请求,但是这里有很多需要服务端配合的,比如:json数据格式,WebP代替jpg,支持断点续传,多个请求合并成一个,尽量不做重定向,服务器缓存以及负载均衡等。

对客户端本身,除了上述的实现,我们还需要合理的缓存,控制最大请求并发量,及时取消已失效的请求,过滤重复请求,timeout时间设置,请求优先级设置等。

优化可不是一个人的事,实现一个功能简单,但是想优化重构,那是很不容易的事。需要多方面的预判与联调。合理的假设与实践是优化最重要的手段。

说完这些具体的点,我们再来说说一些常识,或者称之为代码规范。

  •   你要知道for loop中不要声明临时变量,不到万不得已不要在里面写try catch。
  •   明白垃圾回收机制,避免频繁GC,内存泄漏,OOM(有机会专门说)。
  •   合理使用数据类型,比如StringBuilder代替String,(笔试题最常见的是str+="str"中有几个对象) ,少用枚举enum,少用父类声明(List,Map)。
  •   如果你有频繁的new线程,那最好通过线程池去execute它们,减少线程创建开销。
  •   你要知道单例的好处,并正确的使用它。
  •   多用常量,少用显式的"action_key",并维护一个常量类,别重复声明这些常量。
  •   如果可以,至少要弄懂设计模式中的策略模式,组合模式,装饰模式,工厂模式,观察者模式,这些能帮助你合理的解耦,即使需求频繁变更,你也不用害怕牵一发而动全身。需求变更不可怕,可怕的是没有在写代码之前做合理的设计。

当然还有很多很多,Stay所说的也只是一个大的轮廓,还是需要自己不断的尝试。会开发写代码跟会做产品的区别还是蛮大的,仅仅是态度就能刷死80%的码农了。当你碰到一些需要优化的地方,耐心的去分析,时间的累积会让你成为真正的工程师。

另外优化也没有绝对的完美,每一次优化都是基于当前的环境来做的,要明白沟通是最好的优化,不盲从,不随便,三思而后行。

Android上如何做性能优化的?大概写三年代码就能差不多知道了。

(责任编辑:安博涛)

分享到:

更多
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
  • 微笑/wx
  • 撇嘴/pz
  • 抓狂/zk
  • 流汗/lh
  • 大兵/db
  • 奋斗/fd
  • 疑问/yw
  • 晕/y
  • 偷笑/wx
  • 可爱/ka
  • 傲慢/am
  • 惊恐/jk
用户名: 验证码:点击我更换图片
资料下载专区
图文资讯

网络“狩猎”:为什么企业需要搜寻攻击迹象

网络“狩猎”:为什么企业需要搜寻攻击迹象?

网络狩猎是企业安全的重要组成部分,本文中专家Eric Cole介绍了它可如何帮助企业阻止...[详细]

如何避免虚拟基础设施单点故障

如何避免虚拟基础设施单点故障

墨菲法则提到如果某事可能会出错,那么这件事一定会出错。可能没有比服务器虚拟化更严...[详细]

浅议那些Android中的性能优化

浅议那些Android中的性能优化

性能优化是一个大的范畴,如果有人问你在Android中如何做性能优化的,也许都不知道从...[详细]

OPM攻击事件后:我们从中学到了什么?

OPM攻击事件后:我们从中学到了什么?

在本文中,网络安全专家Michele Chubirka谈到了她对6月份OPM攻击事件的看法以及企业IT...[详细]

企业网络安全之安全维度

企业网络安全之安全维度

这几年国内网络安全概念很热,国家层面在谈,政府在谈,各种公司在谈,各行各业的从业...[详细]

返回首页 返回顶部