0

我阅读了文档http://developer.android.com/reference/android/graphics/drawable/AnimationDrawable.html

它扩展了看起来像一种 UI 的 DrawableContainer,它实现了 Runnable,所以它应该在一个新线程中运行(应该是吧?因为它实现了 Runnable)。那么在这种情况下,我们是否应该遵循“只在 UI 线程中更新 UI 组件”的规则呢?

我测试了一个在 AnimationDrawable.start() 之后执行繁重循环的程序,并且程序崩溃(有著名的停止响应错误)。现在我很困惑,AnimationDrawable.start() 是否在新线程中运行?

编辑:

AnimationDrawable.start();

for (int i = 0 ; i< 10000000 ; i ++){
    System.out.println(i);
}
4

2 回答 2

0

如果您查看源代码:http: //developer.android.com/reference/android/graphics/drawable/AnimationDrawable.html

此类中没有启动新线程。实际上,这个组件每次在屏幕上绘制时都会创建一个新的动画帧。而已。

我不知道您所说的“在 AnimationDrawable.start() 之后执行繁重循环的程序”到底是什么意思,但我很清楚 AnimationDrawable 执行的任何操作都必须快速,基本上无非是图像交换必须在这里进行。

于 2012-11-06T08:34:05.737 回答
0

现在我知道它为什么实现 Runnable 了:

new Thread(){
   public void run(){
     AnimationDrawable.start();
   }
}.start();

for (int i = 0 ; i< 10000000 ; i ++){
   System.out.println(i);
}

我想在我分派start()到新线程之后,它会在一个新线程中运行并且不会导致任何“无响应错误”,但实际上它仍然崩溃。现在我知道它实现了 Runnable,因为 Android 将它发送回 UI 线程来执行。

于 2012-11-06T09:02:44.693 回答