美文网首页
Android内存泄漏

Android内存泄漏

作者: 沉睡的季节 | 来源:发表于2019-01-07 20:26 被阅读0次

内存泄漏

        一般是由于程序编写者对内存使用不当,如对该释放的内存资源没有释放,导致其一直不能被再次使用而使计算机内存被耗尽的现象。重启计算机即可,但根本解决办法还是对代码进行优化。

解决方法

            1、动态回收内存。

                    System.gc();

            2、为应用分配更多的内存。

                    a、在清单文件中的< application >节点下,添加如下代码:android:largeHeap="true"。

                    b、使用 dalvik.system.VMRuntime类提供的setTargetHeapUtilization方法可以增强程序堆内存的处理效率。

            3、自定义内存大小。

                    使用Dalvik提供的 dalvik.system.VMRuntime类来设置最小堆内存

            4、如果是因为图片引起的OOM,其实就可以从图片下手。(使图片体积大小变小)

            5、加载图片时在内存中做处理。(图片的边界压缩)

                fun zoom(resources: Resources, width: Int, height: Int, placeHolder: Int): Bitmap {

                        val options = BitmapFactory.Options()

                        options.inJustDecodeBounds =true

                        BitmapFactory.decodeResource(resources, placeHolder, options)

                        options.inSampleSize = calculateInSampleSize(options.outWidth, options.outHeight, width, height)

                         options.inJustDecodeBounds =false

                        return BitmapFactory.decodeResource(resources, placeHolder, options)

                    }

                private fun calculateInSampleSize(outWidth: Int, outHeight: Int, width: Int, height: Int): Int {

                    var inSampleSize =2

                    if (outWidth > width || outHeight > height) {

                            val heightRatio = Math.round(outHeight / height *1f)

                            val widthRatio = Math.round(outWidth / width *1f)

                            inSampleSize =if (heightRatio < widthRatio) heightRatioelse widthRatio

                    }

                    return inSampleSize

                }

            6、Context泄漏。

            7、资源对象没关闭造成的内存泄漏。

            8、注册没取消造成的内存泄漏。

            9、集合中对象没清理造成的内存泄漏。

            10、使用缓存技术。

相关文章

网友评论

      本文标题:Android内存泄漏

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