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

これで、Runnableを実装する理由がわかりました。

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

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

新しいスレッドにディスパッチした後、start()新しいスレッドで実行され、「応答なしエラー」が発生しないと思いましたが、実際にはクラッシュします。Androidが実行のためにUIスレッドにポストバックするため、Runnableが実装されていることがわかりました。

于 2012-11-06T09:02:44.693 に答える
0

ソースコードを見ると:http://developer.android.com/reference/android/graphics/drawable/AnimationDrawable.html

このクラス内で開始された新しいスレッドはありません。実際、このコンポーネントは、画面に描画されるたびに新しいアニメーション フレームを作成します。これ以上何もない。

「AnimationDrawable.start() の後に重いループを実行するプログラム」が何を意味するのか正確にはわかりませんが、AnimationDrawable によって実行される操作は高速でなければならず、基本的には画像のスワップに過ぎないことは明らかです。ここで実行されます。

于 2012-11-06T08:34:05.737 に答える