我在我的应用上的工作流程/设计中处于棘手的部分。
我有一个运行到服务的MediaPlayer。当用户离开(但不是关闭)应用程序时,我希望音乐停止。也就是主页按钮。
因此,我分别将MediaPlayer的pause()
和start()
方法实施到了活动onStop()
和onResume()
中。当使用按钮进行测试并重新启动应用程序时,这样可以正常工作,但是当屏幕因活动的生命周期而旋转时也会发生这种情况。
那么,我怎样才能以高效/优雅的方式避免这种情况呢?旋转设备时,音乐不能被中断。我想在重写Home Button的click方法时,暂停MediaPlayer并设置一个全局布尔标志来检查onResume()
是否必须恢复MediaPlayer。但在我看来,这似乎是一个黑客左右,而不是一个好的做法。
我错了吗?还有更好的方法吗?
感谢任何建议。
答案 0 :(得分:2)
这里有几个选项:
如果你的minSdkVersion至少为14,你可以在停止媒体播放器之前检查isChangingConfigurations()
标志:
@Override
protected void onStop() {
if (!isChangingConfigurations()) {
// Stop the Media Player
}
}
否则,您可以关注onUserLeaveHint()
:
@Override
protected void onUserLeaveHint() {
// Stop the Media Player
}
虽然如果另一个应用程序被强行吸引到前台(例如来电话),则不会被呼叫。
编辑:作为替代方案,您可以依赖onWindowFocusChanged()
。使用Home或Back离开活动时会调用false
,但不会更改配置。当另一项活动被带到前面时,也应该调用它。
@Override
public void onWindowFocusChanged(boolean hasFocus) {
// Stop the MediaPlayer
}
作为旁注,您通常应使用对称生命周期方法(例如,而不是onPause()
,onStart()
使用onPause()
/ onResume()
或onStop()
/ onStart()
)