Почему 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;
}
...
});