Android 如何销毁活动?
我有一个循环所有按钮和一个停止按钮。当我还在页面上时,两个按钮都可以正常工作。问题是,当我按下“全部循环”按钮时,它会按预期播放一系列音频文件,但当我离开页面时,即按下手机的“后退”按钮并返回页面时,音频不会停止!我按了停止按钮,但什么也没做。停止它的唯一方法是进入任务管理器并结束程序。在我看来,一旦我离开这个页面,mp2的引用就会丢失……有人对如何修复这个问题有什么建议吗。任何帮助都将不胜感激。代码如下:Android 如何销毁活动?,android,android-activity,android-mediaplayer,Android,Android Activity,Android Mediaplayer,我有一个循环所有按钮和一个停止按钮。当我还在页面上时,两个按钮都可以正常工作。问题是,当我按下“全部循环”按钮时,它会按预期播放一系列音频文件,但当我离开页面时,即按下手机的“后退”按钮并返回页面时,音频不会停止!我按了停止按钮,但什么也没做。停止它的唯一方法是进入任务管理器并结束程序。在我看来,一旦我离开这个页面,mp2的引用就会丢失……有人对如何修复这个问题有什么建议吗。任何帮助都将不胜感激。代码如下: public class OneVoc ex
public class OneVoc extends ActionBarActivity {
private ListView lv;
private MediaPlayer mp;
private MediaPlayer mp2;
int[] myAudio = {R.raw.v_1100, R.raw.v_1101, R.raw.v_1102, R.raw.v_1103, R.raw.v_1104, R.raw.v_1105,
R.raw.v_1113, R.raw.v_1106, R.raw.v_1107, R.raw.v_1108, R.raw.v_1109, R.raw.v_1110, R.raw.v_1112,
R.raw.v_1114, R.raw.v_1115, R.raw.v_1116};
int mCompleted = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.one_voc);
Button btnLoop = (Button) findViewById(R.id.button1);
Button btnStop = (Button) findViewById(R.id.button2);
btnStop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (mp2 != null) {
if (mp2.isPlaying()) {
mp2.setOnCompletionListener(null);
mp2.stop();
}
mp2.reset();
mp2.release();
mp2 = null;
}
}
});
btnLoop.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
mp2 = MediaPlayer.create(getBaseContext(), myAudio[0]);
mp2.setOnCompletionListener(new OnCompletionListener()
{
@Override
public void onCompletion(MediaPlayer mp2)
{
mCompleted++;
mp2.reset();
if (mCompleted < myAudio.length)
{
try
{
AssetFileDescriptor afd = getResources().openRawResourceFd(myAudio[mCompleted]);
if (afd != null)
{
mp2.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
afd.close();
mp2.prepare();
mp2.start();
}
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
else if (mCompleted == myAudio.length)
{
mCompleted =0;
try
{
AssetFileDescriptor afd = getResources().openRawResourceFd(myAudio[mCompleted]);
if (afd != null)
{
mp2.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
afd.close();
mp2.prepare();
mp2.start();
}
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
else
{
mCompleted=0;
mp2.release();
mp2 = null;
}
}
});
mp2.start();
}
});
尝试重写onbackpressed方法
@Override
public void onBackPressed()
{
// code here to stop and finish()
super.onBackPressed();
}
我认为这是一个音频缓冲区的问题,内存被加载到音频缓冲区中,并在以后保持,完成可能对你没有帮助。 当你按下android按钮上的“后退”按钮时,它只调用当前活动的“完成”,而当你按下“主页”按钮时,它调用“暂停”, 您需要重写onBackPressed方法,在super.onBackPressed行之前; 请输入代码以停止播放。 当您转到TakMgr时,它只会获取PID,并引用您的应用程序进程并终止该进程。 这就像System.exit0;或者android.os.process.killgetMyPid;
这只会结束你不想要的应用程序。你能在onPause中暂停你的mp并在onResume中重新启动它吗? 也许你还想存储在savedInstance中,此时你正在使用它
希望对您有所帮助当您按“活动”时,请停止mediaplayer,释放资源并完成活动。就这样
@Override
public void onBackPressed()
{
btnStop.performClick();
super.onBackPressed();
}
尝试finishferride Activity onPause方法不要忘记调用super.onPause;在onDestroy活动方法中,尝试单击btnStopbtnStop.performClick;。但请确保btnStop不引用null。我是java编码的新手。我边学习边学习…你把上面的代码放在我的代码里的什么地方?把它放在你的活动课上,活动课上的什么地方?我把它放得到处都是,我得到了红色的曲线???请告诉我确切的位置。我很困惑,把它放在你的onCreate方法上面吧。我在上面的backpressed中添加了覆盖代码,我得到了一个null异常错误。世界跆拳道联盟?为什么这么难?有人请帮忙!!!