FFMPEG

Android CameraX CameraView多页使用

2020-07-13  本文已影响0人  星邪Ara

CameraView是CameraX的高度封装使用方便简单

如果APP就一个页面用到CameraX直接用CameraX.unbindAll()全部解绑没问题。

但是如果两个页面都是了CameraX就会有很大几率出现相机没启动,原因是CameraX.unbindAll()的执行会延迟,比如有A,B两个页面,A页面启动B页面时执行CameraX.unbindAll(),肯能会出现B页面相机刚起动就被关闭了,导致相机黑屏没启动。

后面看了一遍源码,CameraView是跟着页面生命周期Lifecycle走的,就冒出一个想法,能不能不用页面的生命周期直接自己给他弄一个,后面试了下还整没问题,只需要在关CameraX闭的时候执行一下Lifecycle的onDestroy,CameraX就会自行关闭,并释放。

上代码


//自定义生命周期
private LifecycleRegistry cameraLifecycleRegistry;
private LifecycleOwner cameraLifecycleOwner;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    cameraLifecycleOwner = () -> cameraLifecycleRegistry;
    cameraLifecycleRegistry = new LifecycleRegistry(cameraLifecycleOwner);
    cameraLifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_CREATE);
}


@Override
protected void onResume() {
    super.onResume();
    // 绑定生命周期,在需要启动的时候绑定一下新的生命周期
    cameraLifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_RESUME); 
    mCameraView.bindToLifecycle(new WeakReference<>(cameraLifecycleOwner).get());
}


//在需要关闭的位置执行
cameraLifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_DESTROY);

上一篇下一篇

猜你喜欢

热点阅读