qq_41771258的博客

小小安卓

内存优化之内存管理

https://blog.csdn.net/qdjdeveloper/article/details/79649398

                                                

1、Service资源的使用:

            如果需要在后台使用Service,当Service完成任务但停止失败的情况下,会引起内存泄漏,当一个  Service已经不需要时还必须保留它,这对Android应用管理来说是很糟糕的错误之一,所以我们在处理Service的时候尽量使用IntentService它会在处理完给它的任务以后自动关闭

22

2、onTrimMemory优化:

            onTrimMemory主要作用就是指导应用程序在不同的情况下进行自身的内存释放,以避免系统被直接杀掉,以提高应用程序的用户体验,可以调用这个方法的有:
                Application.onTrimMemory()
                Activity.onTrimMemory()
                Fragment.onTrimMemory()
                Service.onTrimMemory()
                ContentProvider.onTrimMemory()
   这个方法中有一些级别参数,会根据方法的级别来进一步决定释放那些内存

3、使用Bitmap优化:

            使用Bitmap类方法recycle()进行回收

             因为Bitmap类的构造方法都是私有的,所以开发的时候不能自己new出来一个Bitmap对象,只能通过BitmapFactory类的静态方法来实例化一个Bitmap。Bitmap都是通过JNI(本地接口)调用方法实现的。所以,加载Bitmap到内存里以后,是包含两部分内存区域的。简单的说,一部分是Java部分的,一部分是C部分的。这个Bitmap对象是由Java部分分配的,垃圾回收机制可以自己回收,但对应的C可用的内存区域,虚拟机不能直接回收,所以只能调用recycle()进行释放。

注:因为Bitmap非常消耗内存所以要对Bitmap进行异常捕获

4、

4、Bitmap:

            使用BitmapFactory类的方法实例化Bitmap的过程中,可以缩小图片,减少内存的使用。使用BitmapFactory.Options设置inSampleSize就可以缩小图片,这个属性值表示缩略图大小为原图的几分之几。

           a) 获得原图大小,进行压缩

            使用BitmapFactory.Options设置inJustDecodeBounds为true后,在使用deodeFile()等方法,并不会真的分配空间,即解码出来的Bitmap为null,然后通过option.outWidth和option.outHeight,获得图片高度

          b)缓存Bitmap 

 如果多个Activity用到一个图片,可以对Bitmap进行缓存,避免创建多个Bitmap对象,项目中,建议使用Glide、Picasso等成熟框架

5、使用优化的数据容器

            利用Android FrameWork里面优化过的容器类,如:SparseArray、SparseBooleanArray、LongSparseArray,通常HashMap实现方式更加高效在于他们避免了对key与value的auotbox自动装箱,并且避免了自动装箱后的解箱

6、使用ProGuard来剔除

               ProGuard可以剔除不需要的代码,重命名类,和方法等方式对代码进行压缩,优化与混淆,可以使代码更加紧凑

7、对最终的APK使用zipalign

https://blog.csdn.net/qdjdeveloper/article/details/79649398

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

内存优化之内存管理

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭