onPause()和onStop()不起作用

时间:2016-11-03 13:57:17

标签: android android-activity android-asynctask

public class PhrasesActivity extends AppCompatActivity {
    MediaPlayer mediaPlayer;
    private MediaPlayer.OnCompletionListener onCompletionListener = new MediaPlayer.OnCompletionListener(){
        @Override
        public void onCompletion(MediaPlayer mediaPlayer) {
            releaseMediaPlayer();
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.word_list);

        final ArrayList<Word> words = new ArrayList<Word>();

#some Word elements added
        WordAdapter wordAdapter = new WordAdapter(this, words, R.color.category_phrases);
        ListView listView = (ListView)findViewById(R.id.numberlist);
        listView.setAdapter(wordAdapter);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                Toast.makeText(PhrasesActivity.this, "Demo", Toast.LENGTH_SHORT).show();
                Word word = words.get(i);
                releaseMediaPlayer();
                mediaPlayer = MediaPlayer.create(PhrasesActivity.this, word.getAudioResourceID());
                mediaPlayer.start();
                mediaPlayer.setOnCompletionListener(onCompletionListener);
            }
        });
    }

@Override
protected void onPause() {
    super.onPause();
    Log.v("PhrasesActivity", "onPause: Paused");
    releaseMediaPlayer();
}

@Override
protected void onStop() {
    super.onStop();
    Log.v("PhrasesActivity", "onPause: Stopped");
    releaseMediaPlayer();
}

    private void releaseMediaPlayer(){
        if(mediaPlayer!= null){
            mediaPlayer.release();
            mediaPlayer= null;
        }
    }
}

此代码不适用于我的应用中的子活动。 我尝试使用Log.v()检查日志,但一切都没有发生。没有创建日志。 的修改 - 我试过只使用onPause()方法。这也没有帮助我解决问题。

3 个答案:

答案 0 :(得分:2)

代码中的错误是在调用super.onStop()/ super.onPause()之前使用必需的指令语句的顺序;

@Override
protected void onPause() {
    // super.onPause();
    Log.v("PhrasesActivity", "onPause: Paused");
    releaseMediaPlayer();
    super.onPause();
}

@Override
protected void onStop() {
    // super.onStop();
    Log.v("PhrasesActivity", "onPause: Stopped");
    releaseMediaPlayer();
    super.onStop();
}

一般来说,在java中我们首先调用super();在重写方法中,然后继续进行进一步的代码编写。 我不明白为什么没有在这里遵循,但改变上面的代码帮助我解决了问题。

感谢Mohammed Atif的帮助!

答案 1 :(得分:0)

int

在原始的Udacity教程中,他们仅使用@Override protected void onPause() { super.onPause(); releaseMediaPlayer(); } @Override protected void onStop() { super.onStop(); releaseMediaPlayer(); } 方法。

但是,只有onStop或只有onStop对我不起作用。

通过将它们都添加(如上所述),对我来说效果很好(Android 10)。 (而且,在致电onPause之后也不必强制致电super.____()。)

答案 2 :(得分:-1)

您需要添加覆盖标记并确保扩展活动

实施例

public class MyActivity extends Activity {
    @Override
    protected void onPause(){
    super.onPause();
    #Some code
    }

    @Override
    protected void onStop(){
    super.onStop();
    #Some code
    }
}