在android中,所有的IO操作最终都是需要句柄来操作文件实现的。句柄数量对于每一个app都有一个上限,常见的是1024个。一旦某个app同时使用的句柄数超过了这个限制,就会看到这个异常:too many open files。

这个问题坑爹的地方就在于超出限制时,到处都有可能会崩溃,有可能是cursor的查询,也有可能是new一个对象。而且只从log分析的话,句柄问题极难定位。

解决思路:句柄太多,那这些句柄来自哪里?搞清楚这个,问题自然就有结论。

那么如何查看句柄?

查看当前句柄详情:adb shell lsof -p <pid>

查看当前句柄总数:adbshell lsof -p <pid> |wc –l

自己可以写一个小的bat脚本,每隔1秒就存一次句柄详情,然后观察句柄的总数,当发现句柄只升不降时,对比早起的句柄详情和现在的句柄详情,就可以找到多出来的那些句柄是来自哪里了。

上面的过程可能比较繁琐耗时,说下我碰见的这个bug根本原因:线程泄露了。

app在有新应用安装的时候会启动一个线程来算MD5值,这个线程是个死循环。。。也就是说,每新安装一个apk就会多一个无线循环的thread,每个thread都会占用几个句柄,最终积累到1024时,程序就挂了。

关于android中的too many open files(error 24)相关推荐

  1. Android中使用fragment出现异常,Error inflating class fragment

    异常: 在xml文件中静态引用fragment,出现了以下异常: Caused by: android.view.InflateException: Binary XML file line #9 i ...

  2. Android中Shared Preferences、Files、Network、SQLite数据库编程总结及示例

    Android数据存储 前言 Android中提供了4中数据存储方式.但是存储的这些数据都是私有的,要想在其他应用程序中使用这些数据.就需要使用ContentProvider(数据共享).下面是对4种 ...

  3. 【转】Android菜单详解——理解android中的Menu--不错

    原文网址:http://www.cnblogs.com/qingblog/archive/2012/06/08/2541709.html 前言 今天看了pro android 3中menu这一章,对A ...

  4. android中的定时任务一般有两种机制,android 定时任务

    使用timertask进行定时任务 首先创建TimerTask: class SynchroTimerTask extends TimerTask { @Override public void ru ...

  5. Java IO在Android中应用(三):Apk加固去壳

    Java I/O在Android中应用(三):Apk加固去壳 前言(废话) 现在在动车上,因为最近接到一个紧急的出差任务,需要去一趟江苏我们移动应用的客户现场.说真的,本来其实我是很困的,但是车上有一 ...

  6. Java IO在Android中应用(二):APK加固

    Java I/O在Android中应用(二):APK加固套壳 前言(废话) 我,有两把键盘,第一把是Poker III(黑轴),第二把是Poker II(红轴).工作的时候我常用的是红轴的Poker ...

  7. Android菜单详解——理解android中的Menu

    前言 今天看了pro android 3中menu这一章,对Android的整个menu体系有了进一步的了解,故整理下笔记与大家分享. PS:强烈推荐<Pro Android 3>,是我至 ...

  8. 【Android FFMPEG 开发】Android 中使用 FFMPEG 对 MP3 文件进行混音操作

    文章目录 一.前置操作 ( 移植 FFMPEG ) 二.FFMPEG 混音命令 三.Android FFMPEG 混音源代码完整示例 四.博客源码 一.前置操作 ( 移植 FFMPEG ) 参考 [A ...

  9. 【Android 安装包优化】Android 中使用 7zr 可执行程序 解压缩文件

    文章目录 一.Android 中使用 7zr 可执行程序 解压缩文件 二.完整代码示例 三.参考资料 一.Android 中使用 7zr 可执行程序 解压缩文件 在上一篇博客 [Android 安装包 ...

最新文章

  1. 【ACM】杭电OJ 1789(Doing Homework again)
  2. 大家都能读懂的IT生活枕边书
  3. python作业代码没有缩进严重吗_Python代码需要缩进吗
  4. pure tornado -- table
  5. github随时同步代码_原来用IntelliJ IDEA操作GitHub这么方便啊
  6. Android TextView设置多样式文本,跑马灯以及霓虹灯效果
  7. ELF文件和BIN文件 uboot.elf uboot.bin
  8. java transactions数组_java里面Transaction transaction = (Transaction)(list.get(i));是什么意思...
  9. Navicat Premium15安装与激活(完整激活版)
  10. 禁用win10触摸屏手势_禁用和启用Win10平板边缘滑动手势的详细方法
  11. Java实现 LeetCode 34 在排序数组中查找元素的第一个和最后一个位置
  12. linux双系统无u盘安装教程视频教程,U盘安装Windows和Ubuntu 15.04双系统图解教程
  13. hdu6069 Counting Divisors
  14. 用labview设计jk触发器_编写数字电路JK触发器仿真程序
  15. [NOIP模拟][动态规划]permut
  16. 写一个判断素数的函数(isprime),在主函数输入一个正整数,输出是否是素数的信息。提示:int main(){int x=23; if (isprime(x)) print
  17. GALIL运动控制卡维修控制器维修DMC-1840
  18. 使用JLINK下载程序可以,但是调试不行
  19. 基于线段的激光雷达单目曲面重建(ICRA2021)
  20. ISBN号码 xdoj 88

热门文章

  1. 13-Error接口错误处理以及go Module
  2. 2022数字经济发展趋势下的人才战略转型
  3. 咕泡学院P5人工智能深度学习笔记
  4. Bentley 软件公司宣布 2021 基础设施数字化光辉大奖赛获奖名单
  5. Hive 之 分区表,外部表,桶表
  6. CSS Outlines
  7. Ask Ziggy:通过语音进行搜索 同时得到语音答复
  8. 解决报错:无法使用 JSX,除非提供了 “--jsx“ 标志。ts(17004)
  9. 在注册表中把服务删除了,为什么还会存在?
  10. 【数据分析与可视化】Pandas可视化与数据透视表的讲解及实战(超详细 附源码)