那么,为什么不呢?
根据我的理解,finish()会破坏整个活动,因此它也应该破坏正在运行的媒体播放器。
这是我的代码:
MediaPlayer ourSong;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);
ourSong = MediaPlayer.create(this, R.raw.hungat);
ourSong.start();
Thread timer = new Thread() {
@Override
public void run() {
try {
sleep(5000);
} catch (InterruptedException e){
e.printStackTrace();
}finally {
Intent i1 = new Intent("android.intent.action.MAINACTIVITY");
startActivity(i1);
}
}
};
timer.start();
}
@Override
protected void onPause() {
super.onPause();
finish();
}
}
答案 0 :(得分:0)
当您致电finish()
时,它会一直运行,直到控制权返回给Android。
由于您没有停止MediaPlayer
实例,因此不会传递控件。
在完成活动之前停止并释放它,并包括onDestroy()
,以便在活动结束时正确处理。
有关详细信息,请查看官方API。
MediaPlayer ourSong;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);
ourSong = MediaPlayer.create(this, R.raw.hungat);
ourSong.start();
Thread timer = new Thread() {
@Override
public void run() {
try {
sleep(5000);
} catch (InterruptedException e){
e.printStackTrace();
destroyMediaPlayer();
}finally {
Intent i1 = new Intent("android.intent.action.MAINACTIVITY");
startActivity(i1);
}
}
};
timer.start();
}
@Override
protected void onPause() {
super.onPause();
destroyMediaPlayer();
finish();
}
@Override
protected void onDestroy() {
super.onPause();
destroyMediaPlayer();
finish();
}
private void destroyMediaPlayer(){
if(ourSong != null){
ourSong.stop();
ourSong.release();
}
}
答案 1 :(得分:0)
MediaPlayer
未与活动相关联,并且不知道活动正在被销毁。因此,MediaPlayer
不受被破坏活动的影响,并继续做你告诉它做的任何事情。
在某种程度上,这是因为MediaPlayer
不需要活动 - 很多时候,MediaPlayer
由服务管理,因为媒体播放应独立于用户使用UI。
欢迎您安排在活动被销毁时停止MediaPlayer
- 正如其他人所指出的那样stop()
和release()
MediaPlayer
onDestroy()
。但是,你必须自己,否则MediaPlayer
无法知道它应该停止。
答案 2 :(得分:0)