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();
}
}
}
ビュー内のこのコードは、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 に投稿するのに十分なほど小さいアプリでこれを複製することは不可能であることがわかりました。