1

こんにちは、ゲームで何かが破壊されるたびに、サーフェス ビュー スレッド内のスレッド クラスを使用して爆発アニメーションの新しいオブジェクトを作成します。短時間に複数の船を破壊した後、アプリはアクティビティを終了します。どうしてこれなの?

explosion ex = new explosion(x,y);
ex.start();

class explosion extends Thread implements Runnable{

    private long startTime;
    private int num = 0;
    private int x;
    private int y;
    public explosion(int mx, int my){
        x = mx;
        y = my;
        startTime = System.currentTimeMillis();
    }
    public void run(){
        while(num < 3){
            long millis = System.currentTimeMillis();
            canvas.drawBitmap(explosions.get(num),x,y,null);
            if(millis - startTime > 50){
                startTime = System.currentTimeMillis();
                num++;
                Log.d("Explosion","Animate");
            }
        }
        Log.d("Explosion","End Thread");
    }
};
4

2 に答える 2

2

developer.android からコピー...

AsyncTask を使用するかどうかに関係なく、シングル スレッド モデルに関する次の 2 つのルールを常に覚えておいてください。

-UI スレッドをブロックしないでください。

-and UI スレッドでのみ AndroidUI ツールキットにアクセスするようにしてください。

この行がクラッシュの原因になっていると思います...

canvas.drawBitmap(explosions.get(num),x,y,null);

このリンクでは、別のスレッドで UI を更新する手順について詳しく説明しています。

http://developer.android.com/resources/articles/painless-threading.html

于 2012-05-08T21:22:41.043 に答える
0

設計上の問題の匂いがします。なぜアニメーションのスレッドを実行するのですか? 敬意を表して、現在のスレッドで実行し、時間ベースのアニメーションを使用する必要があると思います。すでに時間ベースになっているため、コードを変更する必要さえほとんどありません。

于 2012-05-08T21:29:57.527 に答える