正确关闭MediaPlayer

时间:2012-01-17 23:06:41

标签: android media-player android-mediaplayer

我有一个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();
        }
    });

即使在用户完全关闭应用程序后,上一代码也会不断重复。我不禁想到那会很糟糕。我该怎么做才能防止这种情况发生?

1 个答案:

答案 0 :(得分:2)

不确定这是否至关重要,但我在stop()和release()之间调用mPlayer.reset()(我没有看到这个问题)。你确定这是你的应用程序正在生成这些日志条目吗?

此外,重要的是您的媒体播放器调用不会在UI线程上运行,因为它们可能会导致ANR。此外,在同一个后台线程上运行它们,以便媒体播放器调用被序列化,因为MediaPlayer不是线程安全的。