Android 内存问题的解决方法

Android项目中由于加载的图片比较多,所以经常报出内存溢出的错误,当项目中包含大量图片,或者图片过大,可能会oom,常用胡解决方法如下:

方法1 :  等比例缩小图片

                BitmapFactory.Options options = new BitmapFactory.Options();
                options.inSampleSize = 4;

方法2
:  对图片采用软引用,及时地进行recyle()操作

              SoftReference<Bitmap> bitmap;
              bitmap = new SoftReference<Bitmap>(pBitmap);
   	      if(bitmap != null){
              <span style="white-space:pre">	</span>   if(bitmap.get() != null && !bitmap.get().isRecycled()){
                   bitmap.get().recycle();
                   bitmap = null;
            	 }
             }

方法3 :  对复杂的listview进行合理设计与编码:

1.   注意重用Adapter里面的 convertView  以及holder机制的运用

public View getView(int position, View convertView, ViewGroup parent) {
 	 if (convertView == null) {
            v = mInflater.inflate(resource, parent, false);
            final int[] to = mTo;
            final int count = to.length;
            final View[] holder = new View[count];
            for (int i = 0; i < count; i++) {
                holder[i] = v.findViewById(to[i]);
            }
	    v.setTag(holder);
        } else {

        }
    }

2.  上述方法尝试还未成功,可用 lazy loading data

方法4 : 单个页面,横竖屏切换N次后 OOM

1. 看看页面布局当中有没有大的图片,比如背景图之类的。去除xml中相关设置,改在程序中设置背景图(放在onCreate()方法中):

<span style="white-space:pre">	</span>Drawable bg = getResources().getDrawable(R.drawable.bg);
        XXX.setBackgroundDrawable(rlAdDetailone_bg);

在Activity destory时注意,bg.setCallback(null); 防止Activity得不到及时的释放

2. 跟上面方法相似,直接把xml配置文件加载成view 再放到一个容器里,然后直接调用 this.setContentView(View view);方法

避免xml的重复加载

方法5 : 在页面切换时尽可能少地重复使用一些代码,比如:重复调用数据库,反复使用某些对象等等.....

方法6 :Android堆内存也可自己定义大小 和  优化Dalvik虚拟机的堆内存分配

注意若使用这种方法:project build target 只能选择 <= 2.2 版本,否则编译将通不过。 所以不建议用这种方式

     private final static int CWJ_HEAP_SIZE= 6*1024*1024;
 <span style="white-space:pre">	</span>private final static float TARGET_HEAP_UTILIZATION = 0.75f;
        VMRuntime.getRuntime().setMinimumHeapSize(CWJ_HEAP_SIZE);
        VMRuntime.getRuntime().setTargetHeapUtilization(TARGET_HEAP_UTILIZATION);
时间: 2024-11-06 13:53:45

Android 内存问题的解决方法的相关文章

Android开发BUG及解决方法1

错误描述: 问题1: Error:Execution failed for task ':app:transformClassesWithDexForDebug'. > com.Android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'F:\

C语言中常见的内存错误与解决方法

常见的错误 关于内存的一些知识已在内存分配中提及,现记录与分享常见的内存错误与对策. 类型 1:内存未分配成功,却使用了它. 方   法:在使用之前检查指针是否为NULL. 1)当指针p是函数的参数时,在函数入口处用语句assert(p!=NULL)进行断言检查. 2)当使用malloc或new来申请内存时,应该用if(p != NULL)进行防错检查. 类型 2:引用了尚未初始化的指针 原   因:内存的缺省初始值究竟是什么并没有统一的标准,在使用之前都进行初始化. 1)没有初始化的观念. 2

android.view.WindowLeaked的解决方法

Android.view.WindowLeaked一般会发生在Activity中Dialog的显示. android的dialog创建的时候会传入一个参数this,就是当前的activity,dialog必须在Activity销毁之前放掉,否则就会报windowleaked的错误. 分析这个原因是: Dialog是基于Activity而创建的:new ProgressDialog(this):this 就是Activity.Activtity先finish,那Dialog就没得依附了,所以就会报

安装Android studio出现&#39;tools.jar&#39; seems to be not in Android Studio classpath......的解决方法

安装Android studio出现'tools.jar' seems to be not in Android Studio classpath......的解决方法 原创 2015年07月31日 10:45:36 标签: android studio / 安装问题 5874 一.出现的问题 最近项目要把代码迁移到Android studio上,于是下载了最新的Android studio的安装程序,按着网上的步骤进行了安装,结果第一次启动后,出现了一个错误: 'tools.jar' seem

python 进程内存增长问题, 解决方法和工具

python 进程内存增长问题, 解决方法和工具 表现 解决方法 定位问题过程 gdb-python: 搞清楚python程序在做什么 准备gdb 接入gdb 查看线程 查看调用栈 coredump 其他命令 pyrasite: 连接进入python程序 psutil 查看python进程状态 guppy 取得内存使用的各种对象占用情况 无法回收的对象 不可回收对象的例子 ?? objgraph 查找循环引用 表现 运行环境: # uname -a Linux ** 3.10.0-327.el7

Android EditText输入字数限制总结(包括中文输入内存溢出的解决方法)

限定EditText输入个数的解决方案很多,但是一般主要考虑两点,也就是处理两件事: (1)不同语言字符(英文.中文等)处理方式 (2)输入字符达到数目后,是否仍然允许用户输入 第一点,涉及的东东其实蛮多,不同语言在不同编码中占据字节数等,不同语言在U8等编码的表示范围等,这一整块知识很丰富, 自己暂时没有理的特别顺,稍后整理再说吧. 第二点,目前主流app的处理方案也各有不同,qq5.0以前的版本,发表说说貌似是没有字数限制的(我试了一个350字左右的照样发), 5.0以后限制了,这样如果用户

Android EditText输入字数限制总结(包含中文输入内存溢出的解决方法)

转载请注明,大飞:http://blog.csdn.net/rflyee/article/details/38856539 限定EditText输入个数的解决方式非常多,可是一般主要考虑两点.也就是处理两件事: (1)不同语言字符(英文.中文等)处理方式 (2)输入字符达到数目后,是否仍然同意用户输入 第一点,涉及的东东事实上蛮多,不同语言在不同编码中占领字节数等,不同语言在U8等编码的表示范围等,这一整块知识非常丰富,自己临时没有理的特别顺.稍后整理再说吧. 第二点.眼下主流app的处理方案也

Android开发BUG及解决方法2

错误描述: 错误分析: 程序依赖的两个包冲突 解决方法: 在build.gradle文件中android节点下加packagingOptions节点

关于Android滑动冲突的解决方法(二)

之前的一遍学习笔记主要就Android滑动冲突中,在不同方向的滑动所造成冲突进行了了解,这样的冲突非常easy理解,当然也非常easy解决.今天,就同方向的滑动所造成的冲突进行一下了解,这里就先以垂直方向的滑动冲突为背景,这也是日常开发中最常见的一种情况. 这里先看一张效果图 由于GIF 图片大小的限制.截图效果不是非常好 上图是在购物软件上常见的上拉查看图文详情,关于这中动画效果的实现.事实上实现总体的效果,办法是有非常多的,网上有非常多相关的样例,可是对某些细节的处理不是非常清晰.比方,下拉