Android优化六:性能优化

Android优化一:提纲
Android优化二:性能检测
Android优化三:内存优化
Android优化四:App启动速度优化
Android优化五:布局优化
Android优化六:性能优化

节制的使用Service

如果应用程序需要使用Service来执行后台任务的话,只有当任务正在执行的时候才应该让Service运行起来。
当启动一个Service时,系统会倾向于将这个Service所依赖的进程进行保留,系统可以在LRUcache当中缓存的进程数量也会减少,导致切换程序的时候耗费更多性能。
我们可以使用IntentService,当后台任务执行结束后会自动停止,避免了Service的内存泄漏。

当界面不可见时释放内存

当用户打开了另外一个程序,我们的程序界面已经不可见的时候,我们应当将所有和界面相关的资源进行释放。
重写Activity的onTrimMemory()方法,然后在这个方法中监听TRIM_MEMORY_UI_HIDDEN这个级别,一旦触发说明用户离开了程序,此时就可以进行资源释放操作了。

当内存紧张时释放内存

onTrimMemory()方法还有很多种其他类型的回调,可以在手机内存降低的时候及时通知我们,我们应该根据回调中传入的级别来去决定如何释放应用程序的资源。

避免在Bitmap上浪费内存

读取一个Bitmap图片的时候,千万不要去加载不需要的分辨率。可以压缩图片等操作。

HashMap 优化

用 Android Studio 写代码时,经常会提示对 HashMap 的警告优化,推举我们使用 SparseArray 等。

  • SparseArray
    SparseArray比HashMap更省内存,在某些条件下性能更好,主要是因为它避免了对key的自动装箱(int转为Integer类型),它内部则是通过两个数组来进行数据存储的,一个存储key,另外一个存储value,为了优化性能,它内部对数据还采取了压缩的方式来表示稀疏数组的数据。
    SparseArray只能存储key为int类型的数据,同时,SparseArray在存储和读取数据时候,使用的是二分查找法。
    应用场景:数据量不大,最好在千级以内 + key必须为int类型
  • ArrayMap
    如果key的类型已经确定为int类型,那么使用SparseArray,因为它避免了自动装箱的过程,如果key为long类型,使用LongSparseArray。
    如果key类型为其它的类型,则使用ArrayMap。

部分来自:
From https://mp.weixin.qq.com/s/YVvV3-RUjbqYo-DYY3E6nA

你可能感兴趣的:(Android优化六:性能优化)