Android 调用覆盖方法
我将用下面一个简单的例子来问我的问题。我有一个按钮,当点击播放歌曲。除了OnCreate()方法之外,我还有3个方法,pauseMusic()、playMusic()和onDestroy() pauseMusic()和playMusic()在我的按钮的OnClickListener方法中根据歌曲是否正在播放使用。我的问题是,我必须在OnClickListener中实际键入这些方法,我确切地知道它们的使用时间,为什么我不必在任何地方键入onDestroy()方法?我注意到@Override方法经常出现这种情况。它们只是在某一点上自动调用吗?多谢各位Android 调用覆盖方法,android,Android,我将用下面一个简单的例子来问我的问题。我有一个按钮,当点击播放歌曲。除了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
。它们将根据用户是否需要自动调用。如果您感到勇敢和好奇,您可以查看活动
类的源代码。