【发布时间】:2014-11-14 13:28:38
【问题描述】:
我有 10 个类似的活动,每个活动都有 2 个音轨。
我尝试在每次创建活动时创建 2 个媒体播放器,并在每次移动到另一个活动时释放它,但内存实际上不会释放,并且在一段时间后应用程序崩溃。
如何在不让应用程序崩溃的情况下播放许多不同的音轨?
这是其中一项活动的代码:
public class First extends Activity implements OnClickListener{
private static MediaPlayer audio1,audio2;
public static Intent right, left;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.first);
audio1 = MediaPlayer.create(getApplicationContext(), R.raw.audio1);
audio2 = MediaPlayer.create(getApplicationContext(), R.raw.audio2);
setVolumeControlStream(AudioManager.STREAM_MUSIC);
ImageView button1 = (ImageView) findViewById(R.id.button1);
ImageView button2 = (ImageView) findViewById(R.id.button2);
ImageView left = (ImageView) findViewById(R.id.left);
ImageView right = (ImageView) findViewById(R.id.right);
button1.setOnClickListener(this);
button2.setOnClickListener(this);
left.setOnClickListener(this);
right.setOnClickListener(this);
}
@Override
public void onClick(View item) {
if(item.getId() == R.id.button2)
{
audio1.start();
}
else if(item.getId() == R.id.button1)
{
audio2.start();
}
else if(item.getId() == R.id.left)
{
left = new Intent(getApplicationContext(), Tenth.class);
left.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(left);
finish();
}
else if(item.getId() == R.id.right)
{
right = new Intent(getApplicationContext(), Second.class);
right.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(right);
finish();
}
}
@Override
protected void onDestroy() {
audio1.stop();
audio2.stop();
audio1.release();
audio2.release();
audio1 = audio2 = null;
super.onDestroy();
}
}
【问题讨论】:
-
为什么你的 MediaPlayer 被声明为静态的呢?
-
@Mighter ,我没有注意这一点,但似乎这正是问题所在。谢谢!您想将其设为答案,以便我将其标记为已接受吗?
-
我已经发布了答案。
标签: android audio android-activity media-player