[英]How do I destroy an activity?
我有一個全循環按鈕和一個停止按鈕。 當我仍在頁面上時,兩個按鈕都可以正常工作。 問題是,當我按下“全部循環”按鈕時,它會按預期播放一系列音頻文件,但是當我離開頁面(即按下電話的“后退”按鈕)並返回頁面時,音頻不會別停! 我按下了停止按鈕,但是它什么也沒做。 停止它的唯一方法是進入任務管理器並結束程序。 在我看來,一旦離開頁面,mp2的引用就會丟失。有人對如何解決此問題有任何建議。 任何幫助,將不勝感激。 這是代碼:
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();
}
我認為這是一個音頻緩沖區問題,內存已加載到音頻緩沖區中,並在以后持續存在,finish()可能對您沒有幫助。 當您在android按鈕上按下后退按鈕時,它僅調用當前活動的finish(),而當您按下主屏幕按鈕時則調用onPause(),則需要重寫onBackPressed()方法,並且在super.onbackPressed()行之前。 將您的代碼停止播放。 當您轉到TakMgr時,只需獲取與您的App進程相關的PID,然后終止該進程即可。 就像System.exit(0); 或android.os.process.kill(getMyPid()); 只是結束了您不想要的應用程序。
您可以在onPause()中暫停mp,然后在onResume()中重新啟動它嗎?
也許您還想將您當時存儲在saveInstance中!
希望對您有所幫助
當您向后按下活動時,只需停止媒體播放器並釋放資源即可完成活動。就是這樣!
@Override
public void onBackPressed()
{
btnStop.performClick();
super.onBackPressed();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.