当我运行我的应用程序并按主页按钮,然后返回到我的应用程序时,出现RunTimeException和IllegalStateException错误。
我制作了一个简单的带有声音的Android Alphabet游戏,在游戏结束时,用确定按钮显示时间和不正确的次数,以使用户返回主屏幕。但是,当我按下主页按钮然后返回我的应用程序以玩游戏时,在游戏结束时,只要用户单击“确定”,我就会在Logcat中收到RunTimeException和IllegalStateException错误,并且游戏会返回(假设不是重新启动我的应用))。我在这里查看了几篇文章(例如here)并尝试了这些解决方案,但仍然收到以下错误。我也是新手,也不知道这些解决方案与我的代码有什么关系。任何帮助将不胜感激。
/
/ Display the game over results dialog box
public void showGameOverDialog(){
ViewGroup viewGroup = findViewById(android.R.id.content);
View dialogView = LayoutInflater.from(this).inflate(R.layout.game_over_dialog, viewGroup, false);
dialog = new AlertDialog.Builder(this);
dialog.setView(dialogView);
TextView mTextView_Mistakes = dialogView.findViewById(R.id.textView_Mistakes);
String temp = getResources().getString(R.string.mistakes) + incorrectCount;
mTextView_Mistakes.setText(temp);
TextView mTextView_timeUsed = dialogView.findViewById(R.id.textView_timeUsedText);
String temp2 = getResources().getString(R.string.time_used) + mTimeUsed;
mTextView_timeUsed.setText(temp2);
final AlertDialog alertDialog = dialog.create();
final Intent intent = new Intent(this, MainActivity.class);
final Button btnReturnToHome = dialogView.findViewById(R.id.button_return_to_home);
btnReturnToHome.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mBackground.release();
mCorrect.release();
mWrong.release();
startActivity(intent);
finish(); // <-- put this based on a suggestion in a post in this website
}
});
alertDialog.show();
}
@Override
protected void onPause() {
super.onPause();
Log.wtf("OnPause is executed--------------------", "<----------");
mBackground.reset();
mCorrect.reset();
mWrong.reset();
}
@Override
protected void onResume() {
super.onResume();
Log.wtf("OnResume is executed--------------------", "<----------");
if (noResumeFirstTime){ // This makes sure that the following mediaplayers are not started here too.
Log.wtf("Music started on resume--------------------", "<----------");
mBackground.start(); // <-- Line 365 is here ------------------
mCorrect.start();
mWrong.start();
}
noResumeFirstTime = true;
}
该应用有望在没有故障的情况下返回到主要活动,但出现以下错误。
2019-07-28 22:11:58.925 12873-12873/com.example.alphabetsforkids E/lphabetsforkid: Unknown bits set in runtime_flags: 0x8000
2019-07-28 22:12:00.003 12873-12897/com.example.alphabetsforkids E/vndksupport: Could not load /vendor/lib/egl/libGLES_emulation.so from sphal namespace: dlopen failed: library "/vendor/lib/egl/libGLES_emulation.so" not found.
2019-07-28 22:12:00.004 12873-12897/com.example.alphabetsforkids E/libEGL: load_driver(/vendor/lib/egl/libGLES_emulation.so): unknown
2019-07-28 22:12:02.358 12873-12896/com.example.alphabetsforkids E/EGL_emulation: tid 12896: eglQueryString(923): error 0x3008 (EGL_BAD_DISPLAY)
2019-07-28 22:13:42.203 13035-13061/com.example.alphabetsforkids E/vndksupport: Could not load /vendor/lib/egl/libGLES_emulation.so from sphal namespace: dlopen failed: library "/vendor/lib/egl/libGLES_emulation.so" not found.
2019-07-28 22:13:42.203 13035-13061/com.example.alphabetsforkids E/libEGL: load_driver(/vendor/lib/egl/libGLES_emulation.so): unknown
2019-07-28 22:13:43.663 13035-13060/com.example.alphabetsforkids E/EGL_emulation: tid 13060: eglQueryString(923): error 0x3008 (EGL_BAD_DISPLAY)
2019-07-28 22:13:47.845 13035-13035/com.example.alphabetsforkids E/OnResume is executed--------------------: <----------
2019-07-28 22:14:00.320 13035-13035/com.example.alphabetsforkids E/OnPause is executed--------------------: <----------
2019-07-28 22:14:05.848 13035-13035/com.example.alphabetsforkids E/OnResume is executed--------------------: <----------
2019-07-28 22:14:05.882 13035-13035/com.example.alphabetsforkids E/Music started on resume--------------------: <----------
2019-07-28 22:14:05.925 13035-13035/com.example.alphabetsforkids E/MediaPlayerNative: start called in state 1, mPlayer(0x0)
2019-07-28 22:14:05.925 13035-13035/com.example.alphabetsforkids E/MediaPlayerNative: error (-38, 0)
2019-07-28 22:14:05.927 13035-13035/com.example.alphabetsforkids E/MediaPlayerNative: start called in state 1, mPlayer(0x0)
2019-07-28 22:14:05.928 13035-13035/com.example.alphabetsforkids E/MediaPlayerNative: error (-38, 0)
2019-07-28 22:14:05.929 13035-13035/com.example.alphabetsforkids E/MediaPlayerNative: start called in state 1, mPlayer(0x0)
2019-07-28 22:14:05.930 13035-13035/com.example.alphabetsforkids E/MediaPlayerNative: error (-38, 0)
2019-07-28 22:14:06.828 13035-13035/com.example.alphabetsforkids E/MediaPlayer: Error (-38,0)
2019-07-28 22:14:06.831 13035-13035/com.example.alphabetsforkids E/MediaPlayer: Error (-38,0)
2019-07-28 22:14:20.377 13035-13035/com.example.alphabetsforkids E/MediaPlayerNative: start called in state 0, mPlayer(0x0)
2019-07-28 22:14:23.544 13035-13035/com.example.alphabetsforkids E/MediaPlayerNative: start called in state 0, mPlayer(0x0)
2019-07-28 22:14:23.553 13035-13035/com.example.alphabetsforkids E/time is greater than best time: ----
2019-07-28 22:14:25.509 13035-13035/com.example.alphabetsforkids E/OnPause is executed--------------------: <----------
2019-07-28 22:14:25.521 13035-13035/com.example.alphabetsforkids E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.alphabetsforkids, PID: 13035
java.lang.RuntimeException: Unable to pause activity {com.example.alphabetsforkids/com.example.alphabetsforkids.AlphabetGame}: java.lang.IllegalStateException
at android.app.ActivityThread.performPauseActivityIfNeeded(ActivityThread.java:4306)
at android.app.ActivityThread.performPauseActivity(ActivityThread.java:4257)
at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:4209)
at android.app.servertransaction.PauseActivityItem.execute(PauseActivityItem.java:46)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1935)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7116)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:925)
Caused by: java.lang.IllegalStateException
at android.media.MediaPlayer._reset(Native Method)
at android.media.MediaPlayer.reset(MediaPlayer.java:2145)
at com.example.alphabetsforkids.AlphabetGame.onPause(AlphabetGame.java:365)
at android.app.Activity.performPause(Activity.java:7874)
at android.app.Instrumentation.callActivityOnPause(Instrumentation.java:1500)
at android.app.ActivityThread.performPauseActivityIfNeeded(ActivityThread.java:4296)
at android.app.ActivityThread.performPauseActivity(ActivityThread.java:4257)
at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:4209)
at android.app.servertransaction.PauseActivityItem.execute(PauseActivityItem.java:46)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1935)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7116)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:925)
2019-07-28 22:14:26.182 13144-13168/com.example.alphabetsforkids E/vndksupport: Could not load /vendor/lib/egl/libGLES_emulation.so from sphal namespace: dlopen failed: library "/vendor/lib/egl/libGLES_emulation.so" not found.
2019-07-28 22:14:26.182 13144-13168/com.example.alphabetsforkids E/libEGL: load_driver(/vendor/lib/egl/libGLES_emulation.so): unknown
2019-07-28 22:14:26.919 13144-13167/com.example.alphabetsforkids E/EGL_emulation: tid 13167: eglQueryString(923): error 0x3008 (EGL_BAD_DISPLAY)
答案 0 :(得分:0)
您是否在实际设备而不是模拟器上尝试过您的应用程序?我注意到您的GLES库无法加载,对于您的情况我不是100%的,但是GLES通常无法在模拟器上正常工作。
答案 1 :(得分:0)
耕种所有互联网之后,我发现了与我的应用类似的东西并在代码中实现了它,现在它可以完美运行了。但是,自从更新Android Studio之后,我仍然无法在真实设备上运行它。现在需要看一下。顺便说一句,下面是我对自己的问题的解决方案。希望这对使用AlertDialog和Media Player并面临相同问题的其他人有所帮助。
@Override
protected void onPause() {
super.onPause();
Log.wtf("OnPause is executed--------------------", "<----------");
if(mBackground != null){
//mBackground.stop(); <<<----This was also in the code that I found online, but it was causing error for me so I after commenting, it worked.
mBackground.release();
mBackground = null;
}
if(mCorrect != null){
//mCorrect.stop();
mCorrect.release();
mCorrect = null;
}
if(mWrong != null){
//mWrong.stop();
mWrong.release();
mWrong = null;
}
}
@Override
protected void onResume() {
super.onResume();
Log.wtf("OnResume is executed--------------------", "<----------");
if (mBackground == null || !mBackground.isPlaying()){
Log.wtf("on resume---", "<---player null or not playing");
mBackground = MediaPlayer.create(AlphabetGame.this, R.raw.mursal_bensound_littleidea);
}
if (mBackground.isPlaying()){
Log.wtf("on resume---", "<---- player playing");
mBackground.stop();
mBackground.release();
mBackground = MediaPlayer.create(AlphabetGame.this, R.raw.mursal_bensound_littleidea);
}
if (mCorrect == null || !mCorrect.isPlaying()){
Log.wtf("on resume---", "<---player null or not playing");
mCorrect = MediaPlayer.create(AlphabetGame.this, R.raw.correct_choice);
}
if (mCorrect.isPlaying()){
Log.wtf("on resume---", "<---- player playing");
mCorrect.stop();
mCorrect.release();
mCorrect = MediaPlayer.create(AlphabetGame.this, R.raw.correct_choice);
}
if (mWrong == null || !mWrong.isPlaying()){
Log.wtf("on resume---", "<---player null or not playing");
mWrong = MediaPlayer.create(AlphabetGame.this, R.raw.wrong_choice);
}
if (mWrong.isPlaying()){
Log.wtf("on resume---", "<---- player playing");
mWrong.stop();
mWrong.release();
mWrong = MediaPlayer.create(AlphabetGame.this, R.raw.wrong_choice);
}
mBackground.start();
mCorrect.start();
mWrong.start();
}```