summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorLe Juez Victor <[email protected]>2023-05-16 09:00:44 +0000
committerGitHub <[email protected]>2023-05-16 11:00:44 +0200
commit675efbda3b19aa656bc935308013f0af7466c894 (patch)
tree80ea5e74ece0152726154a0167df7746f3ecdfff
parente17cf9ecd7e770e349a74211bc61170f4d23f8e8 (diff)
downloadraylib-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.c22
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:
{