0

音楽を再生しているサービスがあります。私はこのようにフェードアウト を実装しました:

@Override
public void onDestroy(){
    volume=1.0f;
    fade_handler.post(fade_out);
    super.onDestroy();  
}

これはfade_out Runnableです:

private Runnable fade_out = new Runnable(){
    public void run(){
        player.setVolume(volume, volume);
        if(volume>0.0f){
            volume-=0.05f;
            fade_handler.postDelayed(fade_out, 200);
        }
        else{
            player.stop();
            player.release();
            stopForeground(true);
            //here should be super.onDestroy()!!!!!!!
        }
    }
};

問題は、fade_outが終了する前にsuper.onDestroy() get が呼び出されるようになったため、このランナブル内で super.onDestroy() を呼び出したいのですが、どのようにですか?

4

2 に答える 2

2

onDestroy()このメソッドはクリーンアップを行うことになっているため、このようなことを行うのは最善の考えではありません。次のことをお勧めします。

  • のようなメソッドを作成しますvoid fadeOutAndStop()
  • 音量と呼び出しをフェードアウトする Runnable を投稿するように設定しますstopSelf()(または、サービスを今すぐ停止するために使用する方法)。
  • fadeOutAndStop()サービスを停止する必要がある場合は、このメソッドを使用してください。

こうすれば、 で特別なことをする必要さえなくonDestroy()、デザインがずっときれいになります。

于 2012-02-09T09:37:48.237 に答える
1

正しい構文は YourServiceClassName.super.onDestroy() ですが、Malcolm が指摘しているように、これは良い考えではありません。

于 2012-02-09T09:56:12.887 に答える