Закрытие MediaPlayer правильно - PullRequest
2 голосов
/ 18 января 2012

У меня есть действие 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 Ответ

2 голосов
/ 18 января 2012

Не уверен, если это критично, но я вызываю mPlayer.reset () между stop () и release () (и я не вижу этой проблемы).Вы абсолютно уверены, что именно ваше приложение генерирует эти записи журнала?

Кроме того, важно, чтобы ваши вызовы медиаплеера не выполнялись в потоке пользовательского интерфейса, поскольку они могут вызывать ANR.Кроме того, запустите их все в одном фоновом потоке, чтобы сериализовать вызовы медиаплеера, так как MediaPlayer не является потокобезопасным.

...