Lifecycle

문제점 : 뎁스가 깊어질때 CustomVideoView가 가지고 있는 mediaplayer 메모리가 제대로 해제 되지 않는 문제

해결 : life cycle 사용해서 Stop 시 mediaplayer release 처리

VideoView 는 LifecycleObserver 인터페이스를 가지고 있다. 우선 뷰 생성시 라이프 사이클 옵저버 등록

     public VideoView(Context context) {
        super(context);
        initialize(context);
    }

    private void initialize(Context context) {
        if (context instanceof AppCompatActivity) {
            ((AppCompatActivity) context).getLifecycle().addObserver(this);
        }
    }

@OnLifecycleEvent 종류에 따라 life cycle 콜백이 불리게 되는데 stop 되었을때 release destroy 될때 등록되어 있던 observer를 제거 시켜준다.

    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    public void onLifecycleStop() {
        stop();
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
    public void onLifecycleDestroy() {
        if (getContext() != null) {
            if (getContext() instanceof AppCompatActivity) {
                ((AppCompatActivity) getContext()).getLifecycle().removeObserver(this);
            }
        }
    }

사용법 참 쉽구먼 ㅎㅎ