Android 递归栈溢出问题解决
来源:互联网 发布:淘宝官方网站登录网站 编辑:程序博客网 时间:2024/06/06 04:05
首先区别下栈溢出和堆溢出:
我们知道在方法栈中存放着对象调用的引用,栈是有一定深度(长度)的,如果递归调用超过了栈的深度就会触发栈溢出。
而堆内存存放着new出来的对象,如果堆内存区域满了则会引发内存溢出
举个场景,我们在遍历sdcard文件的时候会用到递归,这里如果文件路径深的话就很有可能出现栈溢出,对于此问题的解决方法也很简单,就是不用递归,改为循环。
首先看看我们正常的递归操作:
public static void RecursiveTraversal(String path){ File file = new File(path); file[] files = file.listFile(); if(files == null){ return; } int length = files.length(); for(int i=0; i < length; i++){ if(files[i].isDirectory()){ //递归调用 RecursiveTraversal(files[i].getAbsolutePath()); } else { //do other... } }}
那我们不用递归,改用循环来处理如下:
public static void RecursiveTraversal(String path){ List<File> fileList = new ArrayList<File>(); fileList.add(new File(path)); while(!fileList.isEmpty()){ File file = fileList.remove(0); file[] files = file.listFile(); if(files == null){ return; } int length = files.length(); for(int i=0; i < length; i++){ if(files[i].isDirectory()){ //将需要再次遍历的文件添加至list中 fileList.add(files[i]); } else { //do other... } } }}
先将需要遍历的文件加入list中,然后遍历此list,如果文件为目录则继续添加至list,移除非目录文件,这样不停循环此list,知道没有元素为止,成功的避免了栈溢出问题。
1 0
- Android 递归栈溢出问题解决
- android 内存溢出问题解决方案
- android 图片内存溢出问题解决与优化
- Android加载图片内存溢出问题解决方法
- Android加载图片内存溢出问题解决方法
- 递归过深,栈溢出
- 递归太深会导致栈溢出
- 解决python递归栈溢出
- Python递归导致栈溢出
- 大数据递归栈溢出问题
- 栈溢出(构造函数的递归)
- 递归函数调用多次导致栈溢出
- 用循环代替递归防止栈溢出
- 递归调用中栈溢出原因
- JavaScript---防止递归栈溢出错误
- python解决递归栈溢出的方法,尾递归
- android jxl OOM内存溢出问题解决(适用大部分内存溢出)
- 数组溢出问题解决
- Java基本数据类型
- 华为2015年校园招聘机试题(2)
- 【论文笔记】residual neural network-kaiming he
- Caused by: java.lang.NoSuchMethodError: ....SchedulerFactoryBean.getObject()Lorg/quartz/Scheduler
- SSH 在中出现的could not initialize proxy - no Session 问题
- Android 递归栈溢出问题解决
- 郑轻OJ zzulioj 1068: 二进制数
- android studio改变主题字体大小
- 奖券数目
- 前端优化建议
- Java 异常处理
- 项目经理面试中常被问到的12问题
- 【红宝书笔记】原型模式-prototype
- HashMap实现原理分析