赞
踩
这一节了解一下FD(File Descriptor),它是操作系统对打开的文件或者输入/输出设备的引用。在Linux系统中,文件描述符是一个非负整数,用于唯一标识一个打开的文件。Android是基于Linux内核的操作系统,因此在Android开发中也使用文件描述符来标识打开的文件或者设备。文件描述符通常是通过调用系统函数(例如open()、socket()等)获得的,并且在不需要时需要显式地关闭,以释放系统资源,否则可能造成程序内存泄漏。如下:
- for(int i=0;i<1024;i++) {
- HandlerThread workHandler = new HandlerThread("workHandlerThread");
- workHandler.start();
- }
会报如下异常:
xxx 'Could not make wake event fd: Too many open files'
- for (index in 1 until 1024) {
- AlertDialog.Builder(mActivity).show()
- }
会报如下异常:
xxx java.lang.RuntimeException: Could not read input channel file descriptors from parcel
轻则app程序退出,严重则会导致设备重启
我们可以通过定期获取对应app的FD信息来预防FD问题,如下:
- fun getFd(pid:Int): Int? {
- val fdFile = File("/proc/$pid/fd")
- return if(fdFile.listFiles() != null) {
- fdFile.listFiles()?.size;
- } else {
- 0
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。