Android 移动性能优化

1、安装包太大会对下载失败率有影响。

2、图片采用webP,可以节省用户流量。

3、减少随机读写操作,以此减少对磁盘的IO操作。

4、避免在主线程中进行I/O操作,尤其是写操写。否则在磁盘空间不足情况下,容易引起写入放大。将IO操作移到非主线程中执行即可。

5、利用缓冲区,会有效减少磁盘IO的操作次数。先将对象序列化后的信息写入到缓存区中,然后再一次性写入到磁盘上。

6、合理设置Buffer的大小,设置小了,起不到减少操作IO的次数。也不能设置太大了,否则会导致申请buffer的时间变长。buffer的大小设置

= 读写大小 / 读写次数。

7、如果ZIP文件已保存在本地,解压ZIP中所有的文件,使用ZipFile效率比ZipInputStream高出15-27%。

8、如果ZIP文件已保存在本地,仅解压ZIP中某些文件,建议使用ZipFile。

9、如果ZIP文件不在本地磁盘上,或者需要顺序解压一小部分文件,又或者ZIP文件目录损坏,建议使用ZipInputStream.

10、首次安装的表为空时,不要做无谓的查询操作。

11、对于覆盖安装,在表已经存在的情况下,可以使用insertor replace语句来完成插入。

12、打开数据库会比较耗时,还伴有一些I/O操作,建议在数据库打开后,先不要关闭,在应用程序退出时再关闭。可以采用缓存数据库连接的做法。

13、数据库表如果使用了autoincrement时,需要要额外维护sqlite_sequence而增加的额外I/O开销。增加这个自动递增后,会比没有加这个,耗时多一倍以上。autoincrement关键字会增加CPU、内存、磁盘空间、磁盘IO的负担,所以尽量不要用,除非一定要这样做。

14、解码Bitmap不要使用decodeFile,这样效率不高,建议使用decodeStream,同时传入的文件流为BufferedInputStream。同样decodeResource同样存在性能问题,建议用decodeResourceStream。

15、避免主线程I/O:

(1)避免主线程操作文件和数据库,50%以前的卡顿问题都是由主线程I/O引起的。

(2)用apply代替Sharepreference.commit,前者是异步,后者是同步操作。

(3)提前初始化SharePreference.多进程的android初始化过程的IO读写都是在主线程中的。

16、减少IO读写量:

(1)减少使用select*,从减少从数据库读取的数据量减少耗时。

(2)利用缓存减少重复读写。内存缓存命中极高,投入产出高。

(3)数据库少用autoincrement。

(4)使用合适的数据库分页,sqlite读写磁盘是以page为单位的。从3.12.0开始,pagesize为4KB。

(5)频繁查询的表使用索引,索引可以极大地减少读磁盘的数据量,极大提高效率。

(6)避免无效索引。无效索引除了会触发全表扫描,产生大量冗余的读写之外,还降低了写入性能。

17、减少IO操作次数:

(1)使用8KBBuffer读写,可以减少2到3倍的耗时。

(2)批量更新数据库使用事务。启用事务,会大量减少IO读写。

(3)ZIP压缩大量小文件时建议使用ZipInputStream.

18、避免内存泄漏:避免Activity泄漏,意味着被引用的View、图片等全部泄漏。

19、减少常驻内存:

(1)尽量使用RGB565,将节省图片的内存,高达50%。

(2)避免内存重复。

(3)res/drawable里的图片建议使用Drawable.createFromStream来加载,图片要放置到合适的资源文件夹(hdpi,xxhdpi),使用错误的文件夹,导致图片被放大,最终使用app内存增加。

20、对所有图片解码API做OutOfMemoryError的异常处理。

21、减少GC:

(1)Bitmap尽量使用inBitmap。

(2)建议使用SpraseMap或ArrayMap.

(3)建议StringBuilder重用。

22、核心场景CPU算法最优:

(1)能用int的绝不用float,比较两个float数值大小的执行时间是int数值的4倍左右。

(2)选择合适的容器:一般的容器:Vector、HashMap、LinkedHashMap等,android提供在内存稀缺的性能场景使用的容器:ArrayMap、SparseArray等,基于线程安全,ConcurrentHashMap等。

23、省电的做法,尽量让CPU休眠:

(1)锁屏、灭屏、程序放置后台时,释放或停止Android涉及的耗电服务:GPS、WifiManager、Sensor等。

(2)锁屏、灭屏释放WakeLock,否则会让CPU无法休眠,导致严重的耗电问题。

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

推荐阅读更多精彩内容