diff options
| author | Le Juez Victor <[email protected]> | 2023-05-16 09:00:44 +0000 |
|---|---|---|
| committer | GitHub <[email protected]> | 2023-05-16 11:00:44 +0200 |
| commit | 675efbda3b19aa656bc935308013f0af7466c894 (patch) | |
| tree | 80ea5e74ece0152726154a0167df7746f3ecdfff | |
| parent | e17cf9ecd7e770e349a74211bc61170f4d23f8e8 (diff) | |
| download | raylib-675efbda3b19aa656bc935308013f0af7466c894.tar.gz raylib-675efbda3b19aa656bc935308013f0af7466c894.zip | |
Fix Android app freeze after calling CloseWindow() (#3067)
Fixed that the Android application was not closed properly after calling `CloseWindow()` and continued to run.
| -rw-r--r-- | src/rcore.c | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/src/rcore.c b/src/rcore.c index 31a06f7c..b4132225 100644 --- a/src/rcore.c +++ b/src/rcore.c @@ -718,6 +718,23 @@ void android_main(struct android_app *app) // NOTE: Return codes != 0 are skipped (void)main(1, (char *[]) { arg0, NULL }); + + // Finish native activity + ANativeActivity_finish(CORE.Android.app->activity); + + // Android ALooper_pollAll() variables + int pollResult = 0; + int pollEvents = 0; + + // Wait for app events to close + while (!CORE.Android.app->destroyRequested) { + while ((pollResult = ALooper_pollAll(0, NULL, &pollEvents, (void**)&CORE.Android.source)) >= 0) { + if (CORE.Android.source != NULL) CORE.Android.source->process(CORE.Android.app, CORE.Android.source); + } + } + + // WARNING: Check for deallocation and ensure no other processes are running from the application. + exit(0); // Closes the application completely without going through Java } // NOTE: Add this to header (if apps really need it) @@ -5731,8 +5748,9 @@ static void AndroidCommandCallback(struct android_app *app, int32_t cmd) case APP_CMD_STOP: break; case APP_CMD_DESTROY: { - // TODO: Finish activity? - //ANativeActivity_finish(CORE.Android.app->activity); + // NOTE 1: Call ANativeActivity_finish again to free resources unconditionally. + // NOTE 2: You can deallocate other things that are NativeActivity related here. + ANativeActivity_finish(CORE.Android.app->activity); } break; case APP_CMD_CONFIG_CHANGED: { |
