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()!!!!!!!
        }
    }
};

问题是现在super.onDestroy()在fade_out完成之前被调用- 所以我想在这个可运行对象中调用 super.onDestroy() -但是如何

4

2 回答 2

2

这样做不是最好的主意,onDestroy()因为这种方法应该进行清理。我建议您执行以下操作:

  • 创建一个类似的方法void fadeOutAndStop()
  • 将其设置为发布可淡出音量和调用stopSelf()(或您现在用来停止服务的方法)的 Runnable。
  • fadeOutAndStop()当您需要停止服务时使用该方法。

这样你甚至不需要在 中做任何特别的事情onDestroy(),而且设计会更干净。

于 2012-02-09T09:37:48.237 回答
1

正确的语法是 YourServiceClassName.super.onDestroy(),但正如 Malcolm 指出的那样,这不是一个好主意。

于 2012-02-09T09:56:12.887 回答