Just revisiting this: the documentation actually states that you have to
call release() on the mediaplayer when you are done with it.I suggest that
you use the following pattern to ensure that at any one time the media
player (at least as far as your application is concerned) will only play one
thing:

private MediaPlayer mMediaPlayer = null;

public void onClick(View view) {
if (mMediaPlayer != null) {
mMediaPlayer.stop();
mMediaPlayer.release();
}
mMediaPlayer = MediaPlayer.create(this, R.raw.a1);
mMediaPlayer.start();

I have tried this by simply putting it in a loop within the onClick method:
if I run just the last two lines (without the cleanup) a hundred times, it
will blow up with a NullPointerException. With the resource management, it
does work.

However, I still think it is shoddy design on the Android front. In a
component-based architecture components should manage their resources and
not just blow up. The requirement to call release() takes us back to
good-old C times when you are trying to track all your pointers. Programming
has moved on a bit since then.

Ludwig



2008/10/11 Ludwig <[EMAIL PROTECTED]>

> I have tried this and I can confirm that when you click a button with an
> onClick() method defined as I suggested, that it will fail when clicked many
> times in short succession.
> Looking at the debug messages, it looks like that the mediaplayer is simply
> running out of filehandles and then crashes because it cannot open any more
> files. That situation should be handled inside the mediaplayer code.
>
> This is a bit worrying as it shows that Android has not really been stress
> tested by Google: it makes Android look a bit as if it was coded by novices.
> I think it would be best to file a bug report. Internally it should be
> relatively easy to fix with a bit of resource management: does it really
> make sense to try to play dozens of sound files at the same time?
>
> Ludwig
>
> 2008/10/10 [EMAIL PROTECTED] <[EMAIL PROTECTED]>
>
>
>> > What would be wrong with this:
>> > @Override
>> > public void onClick(View view) {
>> > MediaPlayer mp = MediaPlayer.create(this, R.raw.a2);
>> > mp.start();
>> >}
>>
>> In this case I can to click only 27 times.
>> Then I hve exception - NullPointerException
>>
>> In m5 worked variant:
>>
>> if( mSoundFx != null )
>>      mSoundFx.pause();
>> mSoundFx = mSoundFxs[aBonusType];
>> mSoundFx.seekTo(0);
>> mSoundFx.start();
>>
>> where mSoundFx - MediaPlayer mSoundFx;
>> and mSoundFxs  - MediaPlayer  mSoundFxs = new MediaPlayer[]{
>> MediaPlayer.create( mContext,R.raw.no2),
>> MediaPlayer.create( mContext,R.raw.trc_ok2),
>> MediaPlayer.create( mContext,R.raw.type2) ,
>> MediaPlayer.create( mContext,R.raw.side2),
>> MediaPlayer.create( mContext,R.raw.appl2),
>> };
>>
>> But in 9beta and 1.0_r1 it does not work.
>>
>> >>
>>
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to