如果在没有播放音频的情况下按下主页按钮,则应用程序会崩溃
If home button is pressed without playing the audio, then the app crashes
如果我在没有播放音频的情况下按下主页按钮。该应用程序崩溃了,但当我播放音频并按下主页按钮时它运行良好。
这是我的代码:
@Override
protected void onPause()
{
Context context = getApplicationContext();
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1);
if (!taskInfo.isEmpty()) {
ComponentName topActivity = taskInfo.get(0).topActivity;
if (!topActivity.getPackageName().equals(context.getPackageName())) {
play.pause();
but19.setBackgroundResource(R.drawable.play);
}
}
super.onPause();
}
@Override
public void onBackPressed(){
if(play!=null && (play.isPlaying())){
if(play.isPlaying())
play.stop();
play.release();
}
super.onBackPressed();
}
问题出在 onPause()
方法中。
你需要在暂停之前检查 play
是否正在播放,就像你在 onBackPressed()
中所做的那样
最好也检查 null 以避免崩溃
Its crashing becasue play is null when you pause it crash so add chcek
before calling pasue state.
将 play.pause();
更改为
if( play!=null && play.isPlaying()){
play.pause();
}
完整代码:
@Override
protected void onPause()
{
Context context = getApplicationContext();
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1);
if (!taskInfo.isEmpty()) {
ComponentName topActivity = taskInfo.get(0).topActivity;
if (!topActivity.getPackageName().equals(context.getPackageName())) {
if( play!=null && play.isPlaying()){
play.pause();
}
but19.setBackgroundResource(R.drawable.play);
}
}
super.onPause();
}
Media 框架非常严格state machine,处理所有不同的状态真的很麻烦。
如果问题是 NullPointerException
,请添加空检查。
但即使它不为空,你 也会 在生产中崩溃,因为 pause()
只允许在 {Started, Paused, PlaybackCompleted}
状态下调用,否则它会使你的崩溃应用
播放音频时,它处于 onPause() { play.pause() }
的正确状态。
看看我的回答 here 为 MediaPlayer 的辅助包装器,它可以简化状态检查。
如果能提供错误日志就更好了。不过,也许我可以回答你的问题:
if(play!=null && (play.isPlaying()))
在上面的 if 中,当音频没有播放时,变量 play 可能是 "null",那么应用程序将尝试验证第二个表达式 (play.isPlaying()
),因为 play 是null,它会抛出一个 NullPointerException
.
当音频正在播放时,这两个表达式将为真,因为播放不为空并且音频正在播放,所以这可能是您的应用在播放音频时不会崩溃的原因。
不知道我说的够不够清楚,希望对你有帮助。
干杯
如果我在没有播放音频的情况下按下主页按钮。该应用程序崩溃了,但当我播放音频并按下主页按钮时它运行良好。 这是我的代码:
@Override
protected void onPause()
{
Context context = getApplicationContext();
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1);
if (!taskInfo.isEmpty()) {
ComponentName topActivity = taskInfo.get(0).topActivity;
if (!topActivity.getPackageName().equals(context.getPackageName())) {
play.pause();
but19.setBackgroundResource(R.drawable.play);
}
}
super.onPause();
}
@Override
public void onBackPressed(){
if(play!=null && (play.isPlaying())){
if(play.isPlaying())
play.stop();
play.release();
}
super.onBackPressed();
}
问题出在 onPause()
方法中。
你需要在暂停之前检查 play
是否正在播放,就像你在 onBackPressed()
中所做的那样
最好也检查 null 以避免崩溃
Its crashing becasue play is null when you pause it crash so add chcek before calling pasue state.
将 play.pause();
更改为
if( play!=null && play.isPlaying()){
play.pause();
}
完整代码:
@Override
protected void onPause()
{
Context context = getApplicationContext();
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1);
if (!taskInfo.isEmpty()) {
ComponentName topActivity = taskInfo.get(0).topActivity;
if (!topActivity.getPackageName().equals(context.getPackageName())) {
if( play!=null && play.isPlaying()){
play.pause();
}
but19.setBackgroundResource(R.drawable.play);
}
}
super.onPause();
}
Media 框架非常严格state machine,处理所有不同的状态真的很麻烦。
如果问题是 NullPointerException
,请添加空检查。
但即使它不为空,你 也会 在生产中崩溃,因为 pause()
只允许在 {Started, Paused, PlaybackCompleted}
状态下调用,否则它会使你的崩溃应用
播放音频时,它处于 onPause() { play.pause() }
的正确状态。
看看我的回答 here 为 MediaPlayer 的辅助包装器,它可以简化状态检查。
如果能提供错误日志就更好了。不过,也许我可以回答你的问题:
if(play!=null && (play.isPlaying()))
在上面的 if 中,当音频没有播放时,变量 play 可能是 "null",那么应用程序将尝试验证第二个表达式 (play.isPlaying()
),因为 play 是null,它会抛出一个 NullPointerException
.
当音频正在播放时,这两个表达式将为真,因为播放不为空并且音频正在播放,所以这可能是您的应用在播放音频时不会崩溃的原因。
不知道我说的够不够清楚,希望对你有帮助。
干杯