모션 트윈 및 속성 모션 메모리 유출 분석

속성 애니메이션을 사용할 때 우리는 페이지가 끝날 때 애니메이션을 풀지 않으면 메모리 유출을 일으킬 수 있다는 것을 안다.쉽게 말하면 Value Animator가 Animation Handler에 자신의 Animation Frame Callback을 등록하고 Animation Frame Callback 인터페이스의 실현 유형은 바로 Value Animator 자신이고 Value Animator는view 대상을 가지고 있고view는 activity 대상을 가지고 있기 때문에 activity 대상은 유용되기 때문에 회수할 수 없다.이렇게 하면 메모리 유출을 초래했다.또한AnimationHandler는 단일 모드(andoird-26 소스 기반)임을 설명합니다.
public static AnimationHandler getInstance() {
        if (sAnimatorHandler.get() == null) {
            sAnimatorHandler.set(new AnimationHandler());
        }
        return sAnimatorHandler.get();
    }

그러니까 하나의 속성 애니메이션을 켜면 하나의Handler가 더 많은 것은 아니다.AnimationFrameCallback 객체가 하나 더 있을 뿐입니다.하나의 속성 애니메이션이 하나의 라인을 열었다는 말도 자연히 옳지 않다.
그럼 뷰에 붙은 트윈 애니메이션이 메모리 유출을 일으키지 않을까요?우리는 간단하게 원본 코드를 통해 해석해 봅시다.Animation의 startNow 방법을 보도록 하겠습니다.
 public void startNow() {
        setStartTime(AnimationUtils.currentAnimationTimeMillis());
    }
public void setStartTime(long startTimeMillis) {
        mStartTime = startTimeMillis;
        mStarted = mEnded = false;
        mCycleFlip = false;
        mRepeated = 0;
        mMore = true;
    }

뷰의 startAnimation을 보는 방법
public void startAnimation(Animation animation) {
        animation.setStartTime(Animation.START_ON_FIRST_FRAME);
        setAnimation(animation);
        invalidateParentCaches();
        invalidate(true);
    }


항상 Handler를 켜지 않거나 Callback에 등록하지 않고 애니메이션의 시작 시간을 기록하고 로고 위치 알림 페이지를 초기화하는 등만 기록합니다.따라서 트윈 애니메이션은view의 회수에 따라 회수되며 메모리 유출 위험이 없습니다.구체적인 트윈 애니메이션의 실현 원리는 여러분들이 계속 탐색할 수 있습니다.
여기에 일부 트윈 애니메이션을 추가합니다: 1 사실 애니메이션은view의parentView에서 발생하고view의 canvas를 수정하여 애니메이션 효과를 실현하기 때문에view의 실제 크기는 변하지 않았습니다.2 모션 트윈은 handler에 의존하지 않으며 콜백이 없으며 MQ와 관련이 없습니다.그래서 메모리 유출 가능성은 없어요.3 모션 트윈은view detach에 null로 설정되기 때문에view detach 이후 모션 트윈의 효과가 없습니다.이 비어 있는 동작은detach 방법에서 발생합니다. 만약view가detach라면.모션 트윈을 표시할 수 있도록 애니메이션을 설정하고 화면에 표시합니다.4RecyclerView는 다중 캐시입니다. 1급 캐시에서view가 화면을 떠나서 돌아오면 onbind 방법을 사용하지 않습니다. 따라서 onbind에 모션 트윈을 설정하면, 모션이 RecycleView 위아래로 움직일 수 있습니다.해결 방법은view의attach방법에서 애니메이션의 논리를 설정할 수 있습니다.5 모션 트윈이 속성 애니메이션보다 효율적입니다.
어디에서 나를 찾을 수 있습니까?
내 Github:https://github.com/AndroidMsky
내 블로그 홈 페이지:http://blog.csdn.net/androidmsky

좋은 웹페이지 즐겨찾기