在表面上截图时出现错误

时间:2019-01-29 14:47:40

标签: java android

在屏幕上进行屏幕截图时出现错误。经过大量图片处理后,出现此错误(设备附带),但是应用程序没有停止。

大量图片后,此方法不再起作用。您有解决问题的想法吗?

@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

1 个答案:

答案 0 :(得分:0)

当使用PixelCopy连续获取SurfaceView的内容时(即用于视频传输),我看到了相同的错误。我只在Android 7.0设备上看到了这种效果。

我将此归因于Readback.cpp中存在的内存泄漏,如果我没有记错的话,这是 PixelCopy 内部使用的。

https://github.com/aosp-mirror/platform_frameworks_base/commit/8a29c0ec86a9411a07bb10018c3da69fffc0fe7d#diff-3f79906243073ec92400b65644d330654c8b349e6317259e9639f3a026347d17

此修复程序于2016年9月1日添加,而Android 7.0已于2016年8月22日发布,