2015-06-11 8 views
8

İşlenmeyen istisnalar günlüğe kaydedilmeyi istiyorum, ancak bunun nasıl yapılabileceği ve bunun nasıl yapılabileceği konusunda çelişen bilgiler görüyorum.Günlüğe kaydetme Xamarin işlenmemiş (Android yakalanmamış) özel durumlar

Ben Xamarin bir AndroidEnvironment.UnhandledExceptionRaiser veya AppDomain.CurrentDomain.UnhandledException olayı yükseltir ve bu olaya abone olabilmesi anlıyoruz ama Android benim sürecini öldürmek olduğu izlenimi altında ve ben Android.Utils.Log veya erişimi yok dosya sistemi.

Xamarin'in AdvancedAppLifecycleDemos/HandlingCrashes/App.cs modelini incelerseniz, bu özel durumu günlüğe kaydedemediğinize dair çarpıcı bir argüman vardır.

/// <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); 
    } 

Nasıl işlenmeyen bir özel durum kaydedilebilir?

+0

Merhaba Adem herhangi içinde yerel depolama için bir metin dosyası yazmak için öneririm! Bu parçayı gördün mü? https://forums.xamarin.com/discussion/13784/catching-global-exceptions-in-android, 'Console.Writeline'ın' Android.Util.Log.Debug' adlı çalışmayı görünmüyordu. olduğunu. –

+0

Özellikle iş parçacığı göremedim, ancak Android.Util.Log'un, Android'in işleminizi (örneğin https: // com/Xamarin/monodroid-örnekler/ağaç/ana/AdvancedAppLifecycleDemos/HandlingCrashes). – Adam

+1

Xamarin.Insights'ı düşündünüz mü? Anaaktiflik/appdelegate üzerinde başlatıldıktan sonra işlenmemiş ve ele alınan istisnalarınızı yakalayabilir, ancak android platformda çok iş parçacıklı uygulamaların yavaşlatıldığı içgörüde bir ticaretin olduğu görülmektedir. –

cevap

7

Xamarin Insights, HockeyApp veya diğer çakışma günlükleri, uygulama tamamlanmadan önce kilitlenme verilerini bir şekilde kaydeder. Uygulama yeniden başlatıldığında veriyi sunucuya gönderir (süreç öldürülürken hemen gönderemezler). Yani bu tamamen mümkün. Kilitlenme verilerini cihaz deposuna (büyük ihtimalle) veya yerel bir SQLite veritabanına kaydettiklerinden emin değilim.

Bu kod HockeyApp işlenmeyen özel durumları yakalamak için kullanır. Bu size bazı fikirler verebilir:

AndroidEnvironment.UnhandledExceptionRaiser += (sender, args) => 
{ 
    TraceWriter.WriteTrace(args.Exception); 
    args.Handled = true; 
}; 

AppDomain.CurrentDomain.UnhandledException += (sender, args) => 
    TraceWriter.WriteTrace(args.ExceptionObject); 

// Wire up the unobserved task exception handler 
TaskScheduler.UnobservedTaskException += (sender, args) => 
    TraceWriter.WriteTrace(args.Exception); 

denemek ve bu yöntemlerin

0

Xamarin Insights ne ihtiyaç vardır: https://xamarin.com/insights

Xamarin Insights ile herhangi çöker tam bir özet ve tanımlayabilir uygulamanızda meydana sorunların ve uyarıların ne tür

Xamarin Studio 5.10 son sürümü yayınlandığında Insights da entegre olacak (Read More).