Вот ошибка:
09-12 22:13:05.253: ERROR/AudioFlinger(561): not enough memory for AudioTrack size=53560
09-12 22:13:05.253: ERROR/AudioTrack(561): AudioFlinger could not create track, status: -12
09-12 22:13:05.253: ERROR/AudioSink(561): Unable to create audio track
09-12 22:13:05.253: ERROR/audiothread(561): Error creating AudioTrack
09-12 22:13:05.253: ERROR/PlayerDriver(561): Command PLAYER_PREPARE completed with an error or info PVMFFailure
09-12 22:13:05.253: ERROR/MediaPlayer(2368): error (1, -1)
То, что я делаю, - это создание объекта SoundFX внутри базового действия (все другие действия расширяют базу - так, что все они имеют общие звуковые эффекты и подменю),
Вот мой класс SoundFX:
public class SoundFX {
private SharedPreferences prefs = null;
private MediaPlayer[] sounds = null;
SoundFX(Context c){
ValidateObject.isNotNull(c, "Null context.");
prefs = PreferenceManager.getDefaultSharedPreferences(c);
ValidateObject.isNotNull(prefs, "Null preferences.");
sounds = new MediaPlayer[4];
sounds[0] = MediaPlayer.create(c, R.raw.snd_button_menu);
sounds[1] = MediaPlayer.create(c, R.raw.snd_button_direction);
sounds[2] = MediaPlayer.create(c, R.raw.snd_button_text);
sounds[3] = MediaPlayer.create(c, R.raw.snd_button_drill);
}
public void menu(){
if (prefs.getBoolean("SoundFX", true)){
sounds[0].start();
}
}
public void direction(){
if (prefs.getBoolean("SoundFX", true)){
sounds[1].start();
}
}
public void text(){
if (prefs.getBoolean("SoundFX", true)){
sounds[2].start();
}
}
public void drill(){
if (prefs.getBoolean("SoundFX", true)){
sounds[3].start();
}
}
}
Это будет моя "базовая" деятельность, которая распространяется на все действия:
public class ActivityWithMenu extends Activity {
protected SoundFX soundEffects = null;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
// no content view...
soundEffects = new SoundFX(this);
ValidateObject.isNotNull(soundEffects, "Null SoundFX Object.");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.submenu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.submenu_hide:
moveTaskToBack(true);
return true;
case R.id.submenu_help:
startActivity(new Intent(this, HelpActivity.class));
return true;
case R.id.submenu_preferences:
startActivity(new Intent(this, Preferences.class));
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}
Создает ли каждое действие новый экземпляр итаким образом выделяя больше памяти?Кажется, я не могу понять, почему у меня закончилась память.У меня сложилось впечатление, что все дочерние действия будут использовать один и тот же объект SoundFX ...
edit:
Ошибка возникает после создания и уничтожения примерно 10 ~ 12 действий.Это хорошо работает до того.