美文网首页
内存和流畅度优化

内存和流畅度优化

作者: 爱你雨落 | 来源:发表于2019-04-08 00:33 被阅读0次

假如要实现一个功能,手机上存储有一百万首诗,如存在数据库或者文件之类,要把它们显示在列表上。

为了方便,每首诗的内容我都写成一样:

初步实现方案:

用最直接简单的实现,界面是一个RecyclerView

先定义一个类放数据:

很简单,content放一首诗的内容

然后把全部数据从手机上读取出来,为了方便就不写那么多,我这是模拟把数据库的内容读到内存里:

,放入Adapter设置给RecyclerView,运行一下,没问题,效果如下:

运行效果图

界面看上去是没有问题的,然后打开AS的Profiler,看下内存里面的数据:

可以看到,app总共占用了122.5M的内存,Java分配的对象占用内存是24.9M,并且在下方可以看到,在虚拟机堆里面,存有一百万的数据的ListItem对象是最多的,达到了1600 0000字节,约15m,60%多。可见ListItem占用了大量的内存。

内存优化方案:

由于ListItem占用了大量的内存,可以以此作为一个优化点,在RecyclerView显示界面上,只能显示有限几个的数据,我们并不需要一下子把所有数据都全部加载到内存里,可以按需加载,当列表滑动到某个位置时,再从手机存储里面加载数据出来。

因此,假如这一百万首诗都存储再数据库里面,利用Cursor的moveToPosition方法,可以实现一个按需加载的功能。首先定义一个可以利用Cursor加载数据的Adapter:CursorRecyclerViewAdapter,其中核心代码就是:

用户滑动到哪个位置就利用Cursor移到那个位置去加载那个位置的数据,这样就不用把全部数据加载进内存了,运行一下,再利用Profiler看下内存占用情况:

这时:app总共占用了57.1M的内存,Java分配的对象占用内存是9.1M,并且ListItem占用的内存已经可以忽略不计了,省下了大量的内存,并且同样实现了显示一百万条数据的功能。

对象复用优化:

上面代码中,从Cursor加载出数据的代码是:

里面new了一个ListItem,假如快速滑动时,就会迅速产生大量短生命周期的对象,看下Profiler的内存情况:

从第一幅图可以看到,有锯齿状出现,并且ListItem达到了542个,可见,快速滑动时,短周期的对象大量产生。

帧率优化方案:

还可以怎么优化吗,再使用另一个工具测试下,企鹅的调试工具GT。

待续。。。

相关文章

  • 内存和流畅度优化

    假如要实现一个功能,手机上存储有一百万首诗,如存在数据库或者文件之类,要把它们显示在列表上。 为了方便,每首诗的内...

  • Android性能优化汇总

    Android性能优化可以从以下几个方面展开 流畅度优化 内存优化 电量优化 安装包优化 流畅度优化: Andro...

  • iOS性能优化系列篇之“列表流畅度优化”

    iOS性能优化系列篇之“列表流畅度优化” iOS性能优化系列篇之“列表流畅度优化”

  • Android 优化——内存优化

    Android 优化目录 优化的意义 减少 OOM,提高应用稳定性。 减少卡顿,提高应用流畅度。 减少内存占用,提...

  • 必知必会 | Android 性能优化方面都在这儿[转自鸿洋]

    一般情况下,我们谈性能优化基本上会从以下几个方面: App启动速度优化 UI流畅度优化 内存优化 apk瘦身 电量...

  • Android 性能优化

    一般情况下,我们谈性能优化基本上会从以下几个方面: App启动速度优化 UI流畅度优化 内存优化 apk瘦身 电量...

  • 《移动App性能评测与优化》——流畅度总结

    流畅度优化流程 通过SM对App的流畅度进行测试评估。 优化App的UI来提升流畅度。 通过lint静态扫描代码中...

  • 图片优化

    为什么要进行图片优化 使内存消耗变小 流畅度好 流量变少 apk包变小 用户体验变 图片存储优化 什么是OOM? ...

  • Android 内存管理方式

    1、为什么要进行内存优化 OOM导致崩溃app性能,流畅度问题,会使得界面卡顿 2、内存分配与回收方式(GC机制)...

  • APP-细说APP网络深度优化与网络安全

    前言 说到APP优化,我们也可以从很多方面进行优化,从包大小、页面流畅度、内存占用、数据缓存、网络数据安全等等来优...

网友评论

      本文标题:内存和流畅度优化

      本文链接:https://www.haomeiwen.com/subject/whceiqtx.html