调用覆盖方法

时间:2015-08-10 18:47:59

标签: android

我将使用下面的一个简单示例来提问我的问题。我有一个按钮,点击时播放一首歌。在我的OnCreate()方法之外,我有3个方法,pauseMusic(),playMusic()和onDestroy()。

pauseMusic()和playMusic()在我的Button的OnClickListener方法中使用,具体取决于歌曲是否正在播放。我的问题是,我必须在OnClickListener中输入这些方法,我确切知道它们何时被使用,为什么我不必在任何地方输入我的onDestroy()方法?我注意到@Override方法一直在发生这种情况。它们是否只是自动调用一次?谢谢。

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mediaPlayer = MediaPlayer.create(getApplicationContext(),R.raw.peterock);
    btn = (Button) findViewById(R.id.playButton);

    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (mediaPlayer.isPlaying()){
                pauseMusic();
            }else{
                playMusic();
            }
        }
    });

}

public void pauseMusic(){
    if (mediaPlayer!=null){
        mediaPlayer.pause();
        btn.setText("Play");
    }
}

public void playMusic(){
    if (mediaPlayer!=null){
        mediaPlayer.start();
        btn.setText("Pause");
    }
}

@Override
protected void onDestroy() {
    if (mediaPlayer!= null && mediaPlayer.isPlaying())
        mediaPlayer.stop();
        mediaPlayer.release();
        mediaPlayer = null;
}

1 个答案:

答案 0 :(得分:0)

我不确定我是否理解您的问题,但是让我们试试,这是因为Android活动生命周期,您的Activity中有责任链,onCreate是第一个被调用的,onDestroy是最后一个,总是在一些触发事件后被调用。

Android lifecycle

当您从父类重写方法时,您的对象将成为此方法的第一个响应者。在onDestroy的情况下,onStop将调用您的onDestroy实现。如果你没有覆盖它,该方法会调用你寻找超类实现,并继续攀登继承层次结构,直到找到实现onDestroy的人,它是OO范例的基本继承行为。