在屏幕上进行屏幕截图时出现错误。经过大量图片处理后,出现此错误(设备附带),但是应用程序没有停止。
大量图片后,此方法不再起作用。您有解决问题的想法吗?
@SuppressLint("NewApi")
public static void request(Activity activity, SurfaceView surfaceView, OnScreenShotFinishedListener onScreenShotFinishedListener) {
// Create a bitmap the size of the scene surfaceView.
final Bitmap bitmap = Bitmap.createBitmap(surfaceView.getWidth(), surfaceView.getHeight(), Bitmap.Config.ARGB_8888);
// Create a handler thread to offload the processing of the image.
final HandlerThread handlerThread = new HandlerThread("PixelCopier" + String.valueOf(new Random().nextInt()));
handlerThread.start();
// Make the request to copy.
PixelCopy.request(surfaceView, bitmap, (copyResult) -> {
activity.runOnUiThread(() -> onScreenShotFinishedListener.onScreenShotFinished(copyResult, bitmap));
Log.d("MyData", bitmap.toString());
handlerThread.quitSafely();
handlerThread.interrupt();
}, new Handler(handlerThread.getLooper()));
}
2019-01-29 18:36:07.361 23730-23768 / ge.bunny.giffer E /包裹:dup() 在Parcel :: read中失败,我为0,fds [i]为-1,fd_count为2,错误: 打开的文件太多 2019-01-29 18:36:07.361 23730-23768 / ge.bunny.giffer W / OpenGLRenderer:无法获取最后一个排队的缓冲区,错误= -22
答案 0 :(得分:0)
当使用PixelCopy连续获取SurfaceView的内容时(即用于视频传输),我看到了相同的错误。我只在Android 7.0设备上看到了这种效果。
我将此归因于Readback.cpp中存在的内存泄漏,如果我没有记错的话,这是 PixelCopy 内部使用的。
此修复程序于2016年9月1日添加,而Android 7.0已于2016年8月22日发布,