我的应用程序崩溃时出现以下错误:
System.ArgumentException: Handle must be valid. Parameter name: instance
在3个视图之间来回切换多次时,会发生错误。对于需要多少个开关并没有一致性,但是过一会儿就会导致崩溃。 StackOverflow和其他站点上的多个线程建议尝试将CG Bridge设置为使用Old
模式,但是我似乎无法使它起作用,请更改我的意思。构建应用程序时,我已经激活了诊断级别的输出,但是它始终只打印:
MONO_GC_PARAMS = major=marksweep-conc,nursery-size=8m
我已经创建了一个environment.txt文件,并将“构建操作”设置为AndroidEnvironment,但这没什么区别。我已经尝试了两个文件:
MONO_GC_PARAMS=bridge-implementation=old
和
MONO_GC_PARAMS=bridge-implementation=old,nursery-size=128m,soft-heap-limit=512m,major=marksweep-conc
我发现(Re)Build输出没有差异,并且该应用仍然在完全相同的位置崩溃。
如果找不到针对该特定问题的答案,那么此“解决方案”仍然有效还是无法解决?
答案 0 :(得分:0)
为了验证您的 MONO_GC_PARAMS=bridge-implementation=
更改是否确实生效:
adb shell setprop debug.mono.log default,gc,mono_log_level=debug
adb logcat | grep -e "mono" -i
System.GC.Collect()
GC_NEW_BRIDGE
或 GC_OLD_BRIDGE
的日志,具体取决于是否设置了 old
/new
。您还有 tarjen
选项。不过,tarjen
已证明给我们的团队造成了许多崩溃。默认选项是 tarjen
。 - https://docs.microsoft.com/en-us/xamarin/android/internals/garbage-collection#gc-bridge-options
默认设置是 Tarjan。如果您发现回归,您可能会发现有必要将此选项设置为旧。此外,如果 Tarjan 不能提高性能,您可以选择使用更稳定的 Old 选项。
供参考 - 类似的 Xamarin Android GitHub 问题:https://github.com/xamarin/xamarin-android/issues/6102