【问题标题】:onPause() and onStop() not workingonPause() 和 onStop() 不起作用
【发布时间】:2017-03-17 03:38:36
【问题描述】:
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() 方法。这也没有帮助我解决问题。

【问题讨论】:

  • 什么是子活动?你也没有@Override这些方法
  • 我的意思是儿童活动,对此感到抱歉。我使用了命令(Windows PC 上的 Android Studio 中的 control + o)。我该如何解决这个问题?
  • 您能否发布整个课程,以便我们了解发生了什么/发生了什么。
  • 打印你的洞“孩子”活动以及“父母”活动(如果有的话)。注意:在 android 中没有子活动这样的术语。也许你的意思是片段?
  • 我不认为Android中也有child activity这样的东西。你如何使用它?或发布完整代码

标签: android android-activity android-asynctask


【解决方案1】:

代码中的错误是在调用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 的帮助!

【讨论】:

    【解决方案2】:
    @Override
    protected void onPause() {
        super.onPause();
        releaseMediaPlayer();
    }
    @Override
    protected void onStop() {
        super.onStop();
        releaseMediaPlayer();
    }
    

    在最初的 Udacity 教程中,他们只使用了onStop 方法。

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

    通过添加它们(如上所述),它对我来说很好(Android 10)。 (而且,在调用releaseMediaPlayer() 之后,不必再调用super.____()。)

    【讨论】:

      【解决方案3】:

      您需要添加覆盖标签并确保您正在扩展 Activity

      例子

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

      【讨论】:

      • 这是错误的。您不需要注释要覆盖的方法。
      • 纠正不需要,但在堆栈溢出中,我们总是提倡良好的做法。请参阅stackoverflow.com/a/94411/1492034 了解更多信息您为什么应该这样做
      • 这可能是一个好习惯,但这并不能回答或解决问题。
      猜你喜欢
      • 1970-01-01
      • 2012-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多