onSurfaceTextureDestroyed не вызывается в Android 7/8, SurfaceTexture.setDefaultBufferSize не действует после повторного открытия действия
Зачем 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;
}
...
});