From 59df6d6b13a095cd8bb0bcc48531b1f3e85a820a Mon Sep 17 00:00:00 2001 From: Sylvain Becker Date: Mon, 7 Jan 2019 17:06:50 +0100 Subject: [PATCH] Android: don't allow multiple instance of SDLActivity Default launch mode (standard) allows multiple instances of the SDLActivity. ( https://developer.android.com/guide/topics/manifest/activity-element#lmode ) Not sure this is intended in SDL as this doesn't work. There are static variables in Java, in C code which make this impossible (allow one android_window) and also Audio print errors. There is also some code added in onDestroy as if it would be able to re-initialize: https://hg.libsdl.org/SDL/rev/27686adb08c3 Bug Android activity life-cycle seems to show there is not transition to get out of onDestroy() https://developer.android.com/reference/android/app/Activity#ActivityLifecycle ( can be tested with "adb shell am start my.package.org/.MainActivity" and "adb shell am start -n my.package.org/.MainActivity" ) Send me a message if there are real use-case for this ! --- android-project/app/src/main/AndroidManifest.xml | 2 ++ .../src/main/java/org/libsdl/app/SDLActivity.java | 14 +++----------- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/android-project/app/src/main/AndroidManifest.xml b/android-project/app/src/main/AndroidManifest.xml index 25730cf39a475..e994e46b7e802 100644 --- a/android-project/app/src/main/AndroidManifest.xml +++ b/android-project/app/src/main/AndroidManifest.xml @@ -54,6 +54,8 @@ diff --git a/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java b/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java index 71db55526318d..ac8515d01fc3d 100644 --- a/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java +++ b/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java @@ -386,8 +386,6 @@ protected void onDestroy() { if (SDLActivity.mBrokenLibraries) { super.onDestroy(); - // Reset everything in case the user re opens the app - SDLActivity.initialize(); return; } @@ -405,15 +403,9 @@ protected void onDestroy() { } catch(Exception e) { Log.v(TAG, "Problem stopping thread: " + e); } - SDLActivity.mSDLThread = null; - - //Log.v(TAG, "Finished waiting for SDL thread"); } super.onDestroy(); - - // Reset everything in case the user re opens the app - SDLActivity.initialize(); } @Override @@ -1711,12 +1703,12 @@ else if (requestedOrientation == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT || req return; } - /* Surface is ready */ - SDLActivity.mIsSurfaceReady = true; - /* If the surface has been previously destroyed by onNativeSurfaceDestroyed, recreate it here */ SDLActivity.onNativeSurfaceChanged(); + /* Surface is ready */ + SDLActivity.mIsSurfaceReady = true; + SDLActivity.mNextNativeState = SDLActivity.NativeState.RESUMED; SDLActivity.handleNativeState(); }