마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

2개의 Mediaplayer를 사용 할 때 메모리 사용 부담을 덜기 위해서 release를 사용 하는데 오류가 생깁니다. [closed]

0 추천
MediaPlayer base_sound;
MediaPlayer action_sound;

public void onClick(View v) {
 case R.id.btButton:
  if (initialized == false) {
   baseSound();

  } else {
   mChatService.stop();
   stopPlaying();
   rpmText.setText("0");

  }
  break;
       ....
}

private final Handler mHandler = new Handler() {
       ....
   case MESSAGE_READ:
       ....
   if (RPM_value > 900) {

       
     if (action_sound == null) {
       base_sound.stop();
       base_sound.release();
       base_sound = null;
       SoundRacerActivity.this.actionSound();
     }
     action_sound.start();
     int currVol = RPM_value / 300;

     audioManager1.setStreamVolume(
     AudioManager.STREAM_MUSIC, currVol, 0);

     } else {
   
        if (base_sound == null) {
          action_sound.stop();
          action_sound.release();
          action_sound = null;
          SoundRacerActivity.this.baseSound();

        }
        base_sound.start();
        audioManager1.setStreamVolume(
        AudioManager.STREAM_MUSIC, SOUND_SET, 0);

      }
                .....
}

private void stopPlaying() {
  if (action_sound != null) {
   action_sound.stop();
   action_sound.release();
   action_sound = null;
  } else {
   base_sound.stop();
   base_sound.release();
   base_sound = null;
  }
}

private void baseSound() {
 base_sound = MediaPlayer.create(SoundRacerActivity.this,
   R.raw.porsche_911_gt3_rs_basics);
 base_sound.setAudioStreamType(AudioManager.STREAM_MUSIC);
 base_sound.setLooping(true);

}

private void actionSound() {
 action_sound = MediaPlayer.create(SoundRacerActivity.this,
   R.raw.porsche_911_gt3_rs_exhaust);
 action_sound.setAudioStreamType(AudioManager.STREAM_MUSIC);
 action_sound.setLooping(true);
}


OBD에서 들어오는 값에 따라 사운드를 나누어서 제어를 하고 있습니다.

처음에는 pause를 사용해서 조건 값에 따라 하나의 사운드가 start 하면 다른 하나는 pause를 하는 것을 하였는데

메모리 사용량을 보니 최대 19MB 까지 올라가는 것을 보고 메모리 부담을 줄이기 위해서

하나의 사운드가 start 하면 다른 하나는 stop을 한 후 release 후 null 값을 주는 것을 하는데

두 값이 한번씩 변화는 것은 됩니다. 하지만 하나의 사운드를 계속 유지 상태가 되지 않고 있습니다.

(위의 소스 에서 보면 900이 넘는 계속 값을 주었을 때 한번은 되지만 두번째에서 오류가 생깁니다.)

버튼을 이용한 것을 응용해서 해보았는데...오류가 생기네요 ㅜㅜ

질문을 종료한 이유: 해결
안왕초보 (1,390 포인트) 님이 2014년 3월 3일 질문
안왕초보님이 2014년 3월 4일 closed
자체 해결
if (RPM_value > 900) {

                            if (action_sound == null) {
                                base_sound.stop();
                                base_sound.release();
                                base_sound = null;
                                SoundRacerActivity.this.actionSound();
                                action_sound.start();

                            } else {
                                action_sound.start();
                            }
                            // SoundRacerActivity.this.startVol();

                            int currVol = RPM_value / 300;

                            audioManager1.setStreamVolume(
                                    AudioManager.STREAM_MUSIC, currVol, 0);

                        } else {

                            if (base_sound == null) {
                                action_sound.stop();
                                action_sound.release();
                                action_sound = null;
                                SoundRacerActivity.this.baseSound();
                                base_sound.start();

                            } else {
                                base_sound.start();
                            }
                            audioManager1.setStreamVolume(
                                    AudioManager.STREAM_MUSIC, SOUND_SET, 0);

                        }
...