我阅读了文档http://developer.android.com/reference/android/graphics/drawable/AnimationDrawable.html
它扩展了DrawableContainer,它看起来像一种UI,它实现了Runnable,所以它应该在一个新线程中运行(它应该是正确的?因为它实现了Runnable)。那么在这种情况下,我们是否应该遵循规则“只更新UI线程中的UI组件”?
我测试了一个在AnimationDrawable.start()之后执行重循环的程序,程序崩溃(有着名的停止响应错误)。现在我完全糊涂了,AnimationDrawable.start()是否在新线程中运行?
编辑:
AnimationDrawable.start();
for (int i = 0 ; i< 10000000 ; i ++){
System.out.println(i);
}
答案 0 :(得分:0)
如果查看源代码:http://developer.android.com/reference/android/graphics/drawable/AnimationDrawable.html
此课程中没有新的Thread。实际上,每次在屏幕上绘制时,此组件都会创建一个新的动画帧。没什么。
我不知道你的意思是“在AnimationDrawable.start()之后执行重循环的程序”,但我很清楚,AnimationDrawable执行的任何操作都必须快速,基本上只是一个必须在此处执行图像交换。
答案 1 :(得分: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线程来执行。