AnimationDrawable 是否在后台保留 运行?

Does AnimationDrawable keep running in background?

我在 Android 中有一个自定义视图,它使用了 AnimationDrawable。如果我在我的视图中调用了 AnimationDrawable.start(),并且我在没有调用 stop() 的情况下将应用程序推送到后台,是否会在后台耗尽系统资源?

如果是,我应该如何检测 "view" 到 foreground/background ?我试图避免将代码拆分为 activity,因为我希望自定义视图能够自给自足地处理它自己的生命周期。

编辑:请注意,我知道 Activity.onPause 和 onResume 调用可以帮助我,但我不希望我的自定义视图的使用者为生命周期方法编码 - 我希望我的自定义视图采用照顾好自己。

可以肯定的是,您可以通过覆盖其 onPause()onResume() 来检测 activity 何时进入 foreground/background,如下所示:

@Override
protected void onPause() {
    AnimationDrawable.stop();
}

@Override
protected void onResume() {
    AnimationDrawable.start();
}

如果您想管理 "App going to background" 状态,您有时需要 Activity(或片段)。

我将向自定义视图添加两种方法:

public void startAnimation(){
 //start the AnimationDrawable
}

public void stopAnimation(){
 //stop the AnimationDrawable
}

然后,在你的Activity/Fragment

里面
MyCustomView mCustomView

//initialize view


@Override
protected void onResume() {
  mCustomView.startAnimation();
}

@Override
protected void onPause() {
  mCustomView.stopAnimation();
}

要让视图自行处理,覆盖 onDetachedFromWindow() 并停止其中的动画。您可以检查它是否在 onDraw 内动画,如果它已停止则重新开始。