Chciałbym rejestrować nieobsługiwane wyjątki, ale widzę sprzeczne informacje na temat tego, czy i jak może to być możliwe.Rejestrowanie wyjątków Xamarin nieobsługiwanych (Android uncaught)
Rozumiem, że Xamarin podnosi wydarzenie AndroidEnvironment.UnhandledExceptionRaiser
lub AppDomain.CurrentDomain.UnhandledException
i że mogę zasubskrybować to wydarzenie, ale mam wrażenie, że Android zabija mój proces i że nie mam dostępu do Android.Utils.Log lub system plików.
Jeśli spojrzeć na Xamarin's AdvancedAppLifecycleDemos/HandlingCrashes/App.cs jest przekonujący argument, że nie można zarejestrować tego wyjątku.
/// <summary>
/// When app-wide unhandled exceptions are hit, this will handle them. Be aware however, that typically
/// android will be destroying the process, so there's not a lot you can do on the android side of things,
/// but your xamarin code should still be able to work. so if you have a custom err logging manager or
/// something, you can call that here. You _won't_ be able to call Android.Util.Log, because Dalvik
/// will destroy the java side of the process.
/// </summary>
protected void HandleUnhandledException(object sender, UnhandledExceptionEventArgs args)
{
Exception e = (Exception)args.ExceptionObject;
// log won't be available, because dalvik is destroying the process
//Log.Debug (logTag, "MyHandler caught : " + e.Message);
// instead, your err handling code shoudl be run:
Console.WriteLine("========= MyHandler caught : " + e.Message);
}
W jaki sposób można rejestrować nieobsługiwany wyjątek?
Cześć Adam! Widziałeś ten wątek? https://forums.xamarin.com/discussion/13784/catching-global-exceptions-in-android zauważ, że 'Console.Writeline' nie działa, ale' Android.Util.Log.Debug' jest. –
Nie widziałem tego wątku w szczególności, ale wciąż mam wrażenie, że Android.Util.Log może, ale nie musi działać, ponieważ Android aktywnie uczestniczy w procesie zabijania twojego procesu (jak podano w https: // github .com/xamarin/monodroid-samples/drzewo/master/AdvancedAppLifecycleDemos/HandlingCrashes). – Adam
Czy brałeś pod uwagę Xamarin.Insights? Może przechwycić nieobsługiwane i obsługiwane wyjątki po inicjalizacji na mainactivity/appdelegate, ale wydaje się, że jest to kompromis w spostrzeżeniach spowalniających aplikacje wielowątkowe na platformie Android. –