dotnet / android

.NET for Android provides open-source bindings of the Android SDK for use with .NET managed languages such as C#
MIT License
1.93k stars 532 forks source link

[native, Mono.Android] Remove WeakReference support #9454

Closed jonpryor closed 3 weeks ago

jonpryor commented 4 weeks ago

Context: https://github.com/dotnet/java-interop/issues/1255 Context: https://github.com/xamarin/monodroid/commit/a5c52905293d7eecdb3c078da62100081b338045 Context: https://issuetracker.google.com/issues/36986478 Context: https://github.com/dotnet/android/blob/b56d68fe2a2c2dffa47eb7e41ae08a00fda86367/Documentation/workflow/SystemProperties.md#debugmonowref

Android did not support JNI Weak Global References until API-8 (Android 2.2). To allow Mono for Android applications to run on API-7 and earlier devices, while using JNI Weak Global References when possible (fewer GC allocations, better performance), the GC bridge supported two modes of operation:

With the exception of a "minor" (lol) issue in KitKat v4.4.2 (API-19) -- in which JNIEnv::NewGlobalRef() around a collected JNI Weak Global Reference would return a non-NULL value, which would result in app crashes; xamarin/monodroid@a5c52905 added a workaround to use the WeakReference backend on Android 4.4.2 -- the debug.mono.wref=java backend has not been used since 2014.

Apps could use @(AndroidEnvironment) to set debug.mono.wref=java, but there is no reason to do so (worse performance!), nor has anyone done so on GitHub.com (no matches for debug.mono.wref within files that would be used with @(AndroidEnvironment)).

Cleanup src/native and src/Mono.Android, and remove support for the debug.mono.wref=java backend.