android的一些类库的优缺点

 

通过本人的面试经验,以及接触的android项目,总结了一下android的一些类库的优缺点:android

一,线程方面面试

1.AsyncTask 首先是线程优化以及缺陷方面,针对目前大多数类库来讲,都有好的设计方面和缺陷的方面,好比内部自带的AsyncTask,这个类优势不少,使用方便,加 快快速开发,可是每次都须要new 一下而后把对应的参数放在里面,感受这个过程不是十分稳妥,性能有待增强,主要是内部的一个多线程单任务队列的这么一个机制,其实很恶心,只要大多数人仔 细用过这个类,都可以发觉他实际上是顺序执行你的任务 的,只要稍不注意 感受就像是单线程执行了,我对这个类的设计方面有待增强,一直不明白为什么要这么去设计,优势在哪,固然他也有他好的地方,就是可以让咱们自定义一个线_线 程池去执行任务,能够彻底抛弃他得单任务的思想。(听说是google工程师说得一段话:多线程是个复杂的事情,咱们简化来避免开发者犯错,若是大家要多 线程,调用新方法就好了)sql

2.Vollery 这个类是google 2013年提倡一个类,他适用于网络通讯频繁,大量网络请求的场景,我大概的看了一下源码,里面实现机制倒是不错,提供了缓存的实现,其次还提供了任务取 消机制,可以在activity结束的时候取消一些未完成的请求。可是也有很差的地方,若是只是一两个请求,就没有必要追求这个类,由于他初始化的时候就 会去开启好几个线程,有点相似于master-woker的线程模型。其次在缓存管理方面不是很灵活,在须要仔细管理缓存方面的时候,不可以去细分缓存的 管理,最后在单个数据比较大得时候,最好别用这个,好比下载文件的时候。其实为啥想一想就知道,他会缓存数据,若是把那么大得数据也缓存了,其实也挺恶心 的。数据库

    3.有关线程的一些内部管理,虽然能够用多线程来改善android的运行效率和速度,但同时也会带来一些负面的效应,他会增长耗电量,同时若是不限制线 程的开销,可能会致使anr,毕竟线程是获取时间片去执行的,可是若是大量的线程都耗费时间的话,这样也会引发必定的卡顿。最好的办法就是统一线程管理, 不用随便的使用new Thread(){}.start(),这种方式去开启线程,呆了两个创业公司的感受,这种代码随处可见。json

 

二,ui方面缓存

1. 其实在ui适配这个方面,有很大的争议,不少人的作法都是不一样文件夹下放入不一样的图片,可是这样也会有一个很差的地方,他会致使整个应用变得很大,最近也 再关注一些牛人的博客,stormzhang这个说得我感受是挺有道理的,其实只须要适配一下大的手机图片,保证图片尽可能不被拉伸,其实缩小的话就没有那 么大的必要了,最近跟一些群里面的朋友交流,其实也能够用矢量图来解决这个问题,由于矢量图不会失真,而后判断哪些会被拉锁的图片,用.9来处理 其实_也能很好的解决适配的问题。网络

2. 而后有关于布局方面的优化,好比说你在用一个include这个标签的时候,被导入进来的布局不少时候能够用merge这个标签,可以动态的替代 frameLayout,减小一层标签,有关RelativeLayout和LinearLayout这两个类一直是相互替换的,不少时候若是你的布局只 有一层的时候那么就用LinearLayout,由于他效率高,比较布局的形式相对简单不少,若是布局层次很复杂,那么最好使用 RelativeLayout这个去进行布局。能够有效的改善效率。不少时候都会采用到一个VISIBLE的控件在布局上面,这些控件其实在不用的时候可 以用viewStub这个标签去改善一下,等待使用的时候再去加载进来.多线程

三,数据库方面并发

android 的数据库并发性能很差,由于原本就不是为了并发去设计的,因此最好使用单例模式,不然多个线程操做数据库会抛出异常的,其次是在批量插入时的优 化,sqlite默认会加上事务,因此批量插入的时候千万要先开启事务在事务中进行批量操做,不然批量操做就会打开多个事务,致使性能降低。异步

四,缓存方面

基本上很通用的,由于缓存基本上都养成了习惯,首先是listview 的view用ViewHolder进行缓存,其次是对图片的缓存,第三是对网络的缓存,第四是网络流的时候采用合理的利用缓存机制可以更快的加快下载速度和通讯速度。

五,延迟方面

这 个经常使用在一些界面比较复杂和业务也很复杂的场景,好比说其实不少东西能够在调用onstart的时候去加载,由于onstart这个方法调用的时候用 户已经能够看见界面了。能够很好的防止界面过于复杂致使的黑屏时间过长,可是这个只是一个提升用户体验的方法,要治根仍是得优化界面。而后把数据的加载都 异步化。最后还有一个handler使用的小策略,当数据比较多得时候能够适当的延迟一下handler的发送,好比说能够调用 handler.sendEmptyMessageDelayed,设置一下延迟的时间。

六,网络方面

网 络优化一直是一个很常问的话题,但针对于客户端来讲基本上作优化的地方不是太多,首先保证打开gzip压缩,二 ,给网络请求加上timeout过时时间,三,数据格式的定义,跟android最好的通讯方式就是json,由于数据量比较小,尽可能可以合并请求,这是 一个可以提升很多效率的作法,四,减小重定向的次数

七,代码优化

这个不管是任何语言都通用的优化方式,也是最根本的方式,这个话范围太大了,只能用调优工具去跟踪。而后去改善代码质量,没有绝对的调优方式。

相关文章
相关标签/搜索