Android异常 Too many open files

Android异常 Too many open files,第1张

当出现 Too many open files 异常的时候,意味着文件句柄泄漏过多,句柄泄漏到一定数量之后(一般是接近1024)会导致程序卡死、文件读写异常、socket创建异常等。

一般来说单一进程的最大可打开文件句柄数量为 1024 ,可通过 cat proc/进程ID/limits 查看。

当前程序已使用的句柄数量凯盯可进入文件夹 cd proc/进缺孙厅程ID/fd 查看

在 Android 中能造成文件句柄泄漏主要有以下三类伏隐

Process 使用完之后一定要调用 destroy()

这些用完之后一定要记得 close() ,养成良好的编码习惯

很多时候句柄泄漏是 socket 不能正确的关闭导致的,所以在停止业务的时候,要保证 socket 都能正确的关闭

通过 slof -p 进程ID 可查看当前进程的句柄情况

大致可以定位句柄泄漏的类型

Android自动晌好谨化测试中AccessibilityService获取控件信息(1)

已经做到了获得控件信息,但是AccessibilityEvent.getSource()得到的是被点击的单体对象。我们需要获得是整个窗口的对象,在API16中AccessibilityService新引入的方法getRootInActiveWindow()可宴基以满足我们的要求,所以我们用这个方法得到整个窗口,然后遍历得到所有子节袜稿点。

AccessibilityNodeInfo rowNode = getRootInActiveWindow()

if (rowNode == null) {

Log.i(TAG, "noteInfo is null")

return

} else {

recycle(rowNode)

}

Log.i(TAG, "==============================================")

其中循环的方法recycle():public void recycle(AccessibilityNodeInfo info) {

if (info.getChildCount() == 0) {

Log.i(TAG, "child widget----------------------------" + info.getClassName())

Log.i(TAG, "showDialog:" + info.canOpenPopup())

Log.i(TAG, "Text:" + info.getText())

Log.i(TAG, "windowId:" + info.getWindowId())

} else {

for (int i = 0i <info.getChildCount()i++) {

if(info.getChild(i)!=null){

recycle(info.getChild(i))

}

}

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12459795.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存