我有一个应用程序,在ViewPager中有片段动画。我将ViewPager显示在列表片段的空选项上。动画是在AnimatorSets中组合的NineOldAndroids ObjectAnimators,其中一些动画用svg-android显示的SVG动画。
当我在ViewPager上更改页面时,动画停止在片段中使用此代码:
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
if (myAnimationView != null) {
myAnimationView.restartAnimation();
}
} else {
if (myAnimationView != null) {
myAnimationView.stopAnimation();
}
}
}
View中的这段代码实现了ValueAnimator.AnimatorUpdateListener:
public void stopAnimation() {
endAnimCalled = true;
myAnimatorSet.end();
}
public void restartAnimation() {
endAnimCalled = false;
if (!myAnimatorSet.isStarted()) {
myAnimatorSet.start();
}
}
如果不在动画页面上按回退出,即使几小时后应用程序也会使用1-5%的CPU。如果在动画时在页面上按下后退,则应用程序在后台运行时使用10-30%的CPU。
有没有一种好方法可以通过调用onPause的片段?任何想法为什么应用程序仍然使用1-5%的CPU动画停止?
我发现在一个小到足以合理地在Stack Exchange上发布的应用程序中无法复制。
答案 0 :(得分:0)
确保动画结束是我找到的CPU使用率的唯一解决方案。我已将其设置为仅重复动画10次。我还考虑使用BroadcastReceiver从活动的onPause()传递广播来调用片段中的endAnimation()。
public void startAnimation() {
createAnimation();
animRepeats = 0;
if (!myAnimatorSet.isStarted()) {
myAnimatorSet.start();
}
AnimatorListener myAnimListen = new AnimatorListener() {
@Override
public void onAnimationEnd(Animator animator) {
if (!endAnimCalled && animRepeats < 10) {
myAnimatorSet.start();
animRepeats++;
}
}
@Override public void onAnimationRepeat(Animator animator) {}
@Override public void onAnimationStart(Animator animator) {}
@Override public void onAnimationCancel(Animator animation) {}
};
myAnimatorSet.addListener(myAnimListen);
}
public void stopAnimation() {
endAnimCalled = true;
myAnimatorSet.end();
}
public void restartAnimation() {
endAnimCalled = false;
if (!myAnimatorSet.isStarted()) {
animRepeats = 0;
myAnimatorSet.start();
}
}