0

アプリでアニメーションを使用しています。アクティビティが開始するたびに contentview をそのアニメーション クラスに設定しますが、ユーザーが戻ると、アニメーションを使用した場所でのみクラッシュが発生します。このクラッシュからアプリを保存する方法を教えてください。

    import android.app.Activity;

import android.media.MediaPlayer;
import android.os.Bundle;

public class Ultimate_bomb extends Activity {
    FireworkLayout my;
    MediaPlayer sound;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        my = new Animation(this);
        setContentView(my);
        sound = MediaPlayer.create(Ultimate_bomb.this, R.raw.ultimate_bomb);
        sound.start();
    }

    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        super.onPause();

        sound.release();
        finish();
    }
}
4

1 に答える 1

0

アニメーションを再生しているか、アニメーション クラスで asyncTask を開始していると思います。戻るボタンを押すと、アクティビティは破棄されますが、 Animation クラスのアニメーションまたはタスクは、コンテキストにアタッチされたコンテキストまたはビュー (おそらく imageView) を使用して sth を実行しようとします。問題を解決するには、アニメーションを停止するか、Activity の onPause メソッドで Animation クラスにフラグを設定する必要があります。

編集:使用したFireworkLayoutクラスを調べました(共有したリンクで)。ご覧のとおり、 as という名前のクラスがあり、FireworkLayoutこのクラス内にはGameThread. の場合、このスレッドは描画しAnimateStateますasRunningasPauseアクティビティが一時停止状態になったときに設定する必要があります。

さて、私は啓発されました。あなたもそう思います:) このメソッドを FireworkLayout クラスに追加し、Activity が onPause 状態になったときに onActivityPaused を呼び出します。

public void onActivityPaused() {
    if(thread != null) {
        thread.pause();
    }
}

ところで、再開方法が必要になる場合があります。このメソッドを FireworkLayout クラスに追加し、アクティビティが onResume 状態のときに呼び出します。

public void onActivityResumed() {
    if(thread != null) {
        thread.unpause();
    }
}

編集後のサンプル呼び出し。

@Override
protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();
    my.onActivityPaused();
    ...

}

于 2013-10-27T17:14:02.870 に答える