Android性能优化以及数据优化方法

2019-12-10 18:02:46王冬梅
我和大家之前一起探讨了在Android中对SQLite数据库的操作优化细节。今天谈谈Android性能数据优化方法,需要的朋友可以参考下  

Android性能优化-布局优化

今天,继续Android性能优化 一 编码细节优化。

编码细节,对于程序的运行效率也是有很多的影响的。今天这篇主题由于技术能力有限,所以也不敢在深层去和大家分享。我将这篇主题分为以下几个小节:

(1)缓存

(2)数据

(3)延迟加载和优先加载

1> 缓存

在Android中缓存可以用在很多的地方:对象、IO、网络、DB等等。。对象缓存能减少内存分配,IO缓存能对磁盘的读写访问,网络缓存能减少对网络的访问,DB缓存能减少对数据库的操作。

缓存针对的场景在Android开发中也很明显:

(1)图片缓存

Android中提供了LruCache缓存机制。我们可以使用LruCache来进行图片的缓存。对图片的缓存处理步骤一般是:

加载图片 -> 判断缓存中是否存在 ->存在,直接取出设置到ImageView ->不存在,则请求网络下载图片 -> 图片下载成功,将图片缓存,设置到ImageView

在Android中有很多优秀的第三方开源库,所以我们也不必去重复造轮子。例如:Fresco(FaceBook的产品)、Picasso、Glide、UIL。

(2)不经常改变的数据

 对于不需要经常改变的数据,例如App中的一些产品分类。我们就可以将其缓存起来。不用每次都去请求网络来加载数据。这个比较容易理解,不多说了。

(3)ListView的缓存

ListView Item数据的缓存,相信大家都比较清楚。就是利用Adapter类的getView方法中convertView复用原理,创建ViewHolder实现复用。Material Design 中也提供了RecyclerView来替代ListView。它会强制你在Adapter中使用ViewHolder来复用View。

(4)消息缓存

此处消息是指Handler中发送的Message。系统为我们提供了obtainMessage()来复用一个Message。我们来看下源码:

/**
 * Return a new Message instance from the global pool. Allows us to
 * avoid allocating new objects in many cases.
 */
public static Message obtain() {
 synchronized (sPoolSync) {
 if (sPool != null) {
  Message m = sPool;
  sPool = m.next;
  m.next = null;
  m.flags = 0; // clear in-use flag
  sPoolSize--;
  return m;
 }
 }
 return new Message();
}