美文网首页FFMPEG
Android CameraX CameraView多页使用

Android CameraX CameraView多页使用

作者: 星邪Ara | 来源:发表于2020-07-13 22:09 被阅读0次

    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);
    
    

    相关文章

      网友评论

        本文标题:Android CameraX CameraView多页使用

        本文链接:https://www.haomeiwen.com/subject/yitthktx.html