onPause() 和 onStop() 不起作用
Posted
技术标签:
【中文标题】onPause() 和 onStop() 不起作用【英文标题】:onPause() and onStop() not working 【发布时间】: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
这样的东西。你如何使用它?或发布完整代码
【参考方案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
【讨论】:
这是错误的。您不需要注释要覆盖的方法。 纠正不需要,但在堆栈溢出中,我们总是提倡良好的做法。请参阅***.com/a/94411/1492034 了解更多信息您为什么应该这样做 这可能是一个好习惯,但这并不能回答或解决问题。以上是关于onPause() 和 onStop() 不起作用的主要内容,如果未能解决你的问题,请参考以下文章