Android:在onDestroy()之外调用Service的super.onDestroy()

时间:2012-02-09 09:30:51

标签: android handler ondestroy

我有一个播放音乐的服务。我已经实现了fade out 这样的

@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 结束之前调用了 - 所以我想在这个runnable中调用super.onDestroy() - 但是如何

2 个答案:

答案 0 :(得分:2)

onDestroy()中执行此类操作并不是最好的主意,因为此方法应该进行清理。我建议你做以下事情:

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

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

答案 1 :(得分:1)

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