onSurfaceTextureDestroyed не вызывается в Android 7/8, SurfaceTexture.setDefaultBufferSize не действует после повторного открытия действия - PullRequest
0 голосов
/ 25 сентября 2018

Почему onSurfaceTextureDestroyed не вызывается в Android 7, 8, когда активность становится невидимой (вызываются onPause, onStop)?

Чтобы устранить проблему с заполнением кадра TextureView при предварительном просмотре камерыбольше или меньше размера TextureView's Я использую TextureView's SurfaceTexture.setDefaultBufferSize(cameraWidth, cameraHeight)

, но после того, как активность становится невидимой (onPause, onStop) и onSurfaceTextureDestroyed не вызывается, я пытаюсь вернутьсядля активности (onResume, onStart) фрейм больше не соответствует размеру TextureView, и я пытаюсь вызвать SurfaceTexture.setDefaultBufferSize(cameraWidth, cameraHeight) снова, но это ничего не влияет (фреймы не заполняют полный вид), пока я не вызову этот метод позже:

public void onStart() {
    mTextureView.postDelayed(() -> {
        mTextureView.getSurfaceTexture().setDefaultBufferSize(cameraWidth, cameraHeight);
    }, 2000);
}

, поэтому onSurfaceTextureDestroyed не вызывается во время onPause, onStop

и onSurfaceTextureAvailable вызывается только один раз после onCreate, onStart, onResume, но не вызывается после повторного открытия действия(onPause, onStop, onStart, onResume), потому что текстура не была уничтожена ....

mTextureView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() {
        @Override
        public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) { 
            // is called only once, isn't called after reopening activity
            Log.i(TAG, "mTextureView onSurfaceTextureAvailable");
            surface.setDefaultBufferSize(cameraWidth, cameraHeight)
        }


        @Override
        public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
            // isn't called on Android 7, 8
            Log.i(TAG, "mTextureView onSurfaceTextureDestroyed");
            return true;
        }

        ...
    });
...