Android 调用覆盖方法

Android 调用覆盖方法,android,Android,我将用下面一个简单的例子来问我的问题。我有一个按钮,当点击播放歌曲。除了OnCreate()方法之外,我还有3个方法,pauseMusic()、playMusic()和onDestroy() pauseMusic()和playMusic()在我的按钮的OnClickListener方法中根据歌曲是否正在播放使用。我的问题是,我必须在OnClickListener中实际键入这些方法,我确切地知道它们的使用时间,为什么我不必在任何地方键入onDestroy()方法?我注意到@Override方法经常

我将用下面一个简单的例子来问我的问题。我有一个按钮,当点击播放歌曲。除了OnCreate()方法之外,我还有3个方法,pauseMusic()、playMusic()和onDestroy()

pauseMusic()和playMusic()在我的按钮的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;
}

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


当您重写父类中的方法时,您的对象将成为该方法的第一个响应者。对于onDestroy,onStop将调用onDestroy的实现。如果您没有重写它,那么方法调用将查找超类实现,并将继续爬升继承层次结构,直到找到实现onDestroy的人,这是OO范例中的一个基本继承行为。

您能更清楚一点吗?受保护的void onDestroy()方法在我的程序中用于清除内存空间,但我从来没有像在其他两个方法(playMusic()、pauseMusic()中那样在onCreate()方法中实际键入它。为什么会这样?什么时候打电话?OnCeRATE()是在它的函数完成之后吗?我对Android工作室有点新,而且大部分都是用C++编程的,所以我很好奇,当这个案例中没有调用main函数OnCeCuto()时,它是如何执行的。是的。这些方法由系统调用,作为活动生命周期的一部分。请注意,您也不必实例化该活动。@Override只表示这些方法在类层次结构中声明得更高,这意味着它们是已知的,即使您实现了它们。@MarkF
onCreate()
onDestroy()
都是
Activity
。它们将根据用户是否需要自动调用。如果您感到勇敢和好奇,您可以查看
活动
类的源代码。