我有一个MediaPlayer活动,我以为我已经完成了,直到我注意到详细的LogCat输出并看到这种情况不断重复。
01-17 17:03:50.466: D/StatusBarPolicy(209): iconIndex=1
01-17 17:03:50.476: V/StatusBarPolicy(209): cdmaLevel:1;max:4
01-17 17:03:50.476: D/StatusBarPolicy(209): iconLevel:1
01-17 17:03:50.476: D/StatusBarService(209): updateIcon slot=phone_signal index=20 viewIndex=14 old=StatusBarIcon(pkg=com.android.systemui id=0x7f020007 level=0 visible=true num=0 ) icon=StatusBarIcon(pkg=com.android.systemui id=0x7f020008 level=0 visible=true num=0 )
01-17 17:03:50.597: V/MediaPlayer(16768): getCurrentPosition
01-17 17:03:50.597: V/MediaPlayerService(82): getCurrentPosition
01-17 17:03:50.597: V/MediaPlayerService(82): [261] getCurrentPosition = 277943
01-17 17:03:50.597: V/MediaPlayerService(82): [261] isPlaying: 0
01-17 17:03:50.597: V/MediaPlayer(16768): isPlaying: 0
01-17 17:03:50.597: V/MediaPlayerService(82): [261] isPlaying: 0
01-17 17:03:50.597: V/MediaPlayer(16768): isPlaying: 0
01-17 17:03:50.847: V/MediaPlayer(16768): getCurrentPosition
01-17 17:03:50.847: V/MediaPlayerService(82): getCurrentPosition
01-17 17:03:50.847: V/MediaPlayerService(82): [261] getCurrentPosition = 277943'
这让我觉得我没有正确地关闭我的活动。我正在使用的代码是
cancelButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
new AlertDialog.Builder( CastrRecorder.this )
.setTitle( "Close" )
.setMessage( "Any unsaved changes will be lost. Continue?" )
.setPositiveButton( "Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Log.d( "AlertDialog", "Positive" );
mPlayer.stop();
mPlayer.release();
Intent baseIntent = new Intent(Recorder.this, Activity.class);
Recorder.this.startActivity(baseIntent);
}
})
.setNegativeButton( "No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Log.d( "AlertDialog", "Negative" );
}
} )
.show();
}
});
即使在用户完全关闭应用程序后,上一代码也会不断重复。我不禁想到那会很糟糕。我该怎么做才能防止这种情况发生?
答案 0 :(得分:2)
不确定这是否至关重要,但我在stop()和release()之间调用mPlayer.reset()(我没有看到这个问题)。你确定这是你的应用程序正在生成这些日志条目吗?
此外,重要的是您的媒体播放器调用不会在UI线程上运行,因为它们可能会导致ANR。此外,在同一个后台线程上运行它们,以便媒体播放器调用被序列化,因为MediaPlayer不是线程安全的。