2015-10-18 8 views
13

हम सभी जानते हैं कि मोबाइल कॉम्पैक्ट प्लेटफ़ॉर्म है जहां हमें एप्लिकेशन बनाने के दौरान बहुत सारी चीजें देखना पड़ता है। यह कुछ भी हो सकता है उदा। MemoryPerformanceResolutionsArchitectureImplementation आदि हम जब कभी पता नहीं और क्या कारण एप्लिकेशन एक बड़ा मुद्दा दुर्घटना एप्लिकेशन के साथ खेलते हुए, यह भी हो सकता है किसी भी समयग्लोबल अपवाद Xamarin हैंडलिंग | Droid | आईओएस

उदा ऐप लॉन्च, लोड स्क्रीन, एपीआई कॉल, बाइंडिंग डेटा, इमेज लोडिंग इत्यादि।

और मुझे विश्वास है कि यह पता लगाने में वास्तव में मुश्किल है कि ऐप में कोई समस्या क्यों है और क्या कारण है। मैंने फ़ोरम, तकनीकी समुदाय और समूहों पर कई पोस्ट देखी हैं जो एक ही मुद्दे से संबंधित हैं, जहां लोग आमतौर पर प्रश्न पूछते हैं:

  1. लॉन्च करने पर ऐप क्रैशिंग।
  2. स्पलैश स्क्रीन लोडिंग पर ऐप क्रैश।
  3. छवि दिखाते समय ऐप क्रैश।
  4. एपी से डेटा बाध्य करते समय ऐप क्रैशिंग।

समस्या की पहचान कैसे करें और इसका कारण कहां है?

उत्तर

12

उद्देश्य: हमारे यहाँ उद्देश्य एक अपवाद के डेटा स्टैक ट्रेस है कि हम वास्तव में क्या Release Mode या Debug Mode में क्या समस्या का कारण बनता है पहचान करने में मदद हड़पने के लिए। हम इस मुद्दे और कारणों को समझने में सक्षम होंगे। हम इस डेटा को text फ़ाइल में संग्रहीत करेंगे जो डिवाइस संग्रहण में स्टोर किया जाएगा।


समाधान: वैकल्पिक रूप से आप अपने खुद के अंतर्दृष्टि वह पंजे है कि आप आप अनुप्रयोग अंतर्दृष्टि और सुराग दे देंगे एप्लिकेशन का परीक्षण करते समय अगर कुछ गलत हो गया कर सकते हैं। यह तुम्हारा होगा, आप चाहें तो आप ट्विक कर सकते हैं। आइए दुनिया भर में try{} और catch{} पर जाएं।

Helper Class फ़ाइल बनाएं जिसमें अपवाद डेटा के लिए टेक्स्ट फ़ाइल उत्पन्न करने का कोई तरीका है।

public static class ExceptionFileWriter 
{ 
    #region Property File Path 

    static string FilePath 
    { 
     get 
     { 
      string path = string.Empty; 
      var _fileName = "Fatal.txt"; 
#if __IOS__ 
      string documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); // Documents folder C:\ddddd 
      string libraryPath = Path.Combine(documentsPath, "..", "Library"); // Library folder C:\dddd\...\library 
      path = Path.Combine(libraryPath, _fileName); //c:\ddddd\...\library\NBCCSeva.db3 
#else 
#if __ANDROID__ 
      string dir = Path.Combine(Android.OS.Environment.ExternalStorageDirectory.ToString(), "Exception"); 
     if (Directory.Exists(dir)) 
      return Path.Combine(dir, _fileName); 
     path= Path.Combine(Directory.CreateDirectory(dir).FullName, _fileName); 
#endif 
#endif 
      return path; 
     } 
    } 

    #endregion 

    #region ToLog Exception 

    public static void ToLogUnhandledException(this Exception exception) 
    { 
     try 
     { 
      var errorMessage = String.Format("Time: {0}\r\nError: Unhandled Exception\r\n{1}\n\n", DateTime.Now, string.IsNullOrEmpty(exception.StackTrace) ? exception.ToString() : exception.StackTrace); 
      File.WriteAllText(FilePath, errorMessage); 
     } 
     catch (Exception ex) 
     { 
      // just suppress any error logging exceptions 
     } 
    } 

    #endregion 
} 

समय कोड लागू करने के लिए: यदि आपके ऐप की Application फ़ाइल या Splash Activity अंदर निम्न इवेंट सदस्यता लें। मैं इस मामले में आवेदन का उपयोग कर रहा हूँ।

AppDomain.CurrentDomain.UnhandledException += CurrentDomainOnUnhandledException; 
TaskScheduler.UnobservedTaskException += TaskSchedulerOnUnobservedTaskException; 

[Application] 
public class ExceptionHandlingApp : Application 
{ 
    #region Constructor 

    public ExceptionHandlingApp(IntPtr javaReference, JniHandleOwnership transfer) 
     : base(javaReference, transfer) 
    { 

    } 

    #endregion 

    #region OnCreate 

    public override void OnCreate() 
    { 
     base.OnCreate(); 
     AppDomain.CurrentDomain.UnhandledException += CurrentDomainOnUnhandledException; 
     TaskScheduler.UnobservedTaskException += TaskSchedulerOnUnobservedTaskException; 
    } 

    #endregion 

    #region Task Schedular Exception 

    private static void TaskSchedulerOnUnobservedTaskException(object sender, UnobservedTaskExceptionEventArgs unobservedTaskExceptionEventArgs) 
    { 
     var newExc = new Exception("TaskSchedulerOnUnobservedTaskException", unobservedTaskExceptionEventArgs.Exception); 
     newExc.ToLogUnhandledException(); 
    } 

    #endregion 

    #region Current Domain Exception 

    private static void CurrentDomainOnUnhandledException(object sender, UnhandledExceptionEventArgs unhandledExceptionEventArgs) 
    { 
     var newExc = new Exception("CurrentDomainOnUnhandledException", unhandledExceptionEventArgs.ExceptionObject as Exception); 
     newExc.ToLogUnhandledException(); 
    } 

    #endregion 
} 

ध्यान दें: आप अपवाद डिवाइस संग्रहण में रिकॉर्ड फ़ाइल प्राप्त कर सकते हैं | फ़ाइल प्रबंधक> अपवाद फ़ोल्डर> fatal.txt

चीयर्स !!

Result Video

Full Article

5

अपने दम पर यह कर के अलावा आप भी Xamarin.Insights उपयोग कर सकते हैं के रूप में यह Xamarin उपयोगकर्ताओं के लिए उपयोग करने के लिए नि: शुल्क है और सभी प्लेटफार्मों के लिए कार्यान्वयन मिल गया है। उपयोगकर्ता को आपको लॉग फ़ाइल मैन्युअल रूप से भेजने की आवश्यकता के बिना ऑनलाइन उपयोग रिपोर्ट, क्रैश रिपोर्ट इत्यादि प्राप्त होती है।

केवल एक चीज आप क्रैश रिपोर्ट प्राप्त करने के लिए क्या करने की जरूरत अपने अनुप्रयोग के स्टार्टअप पर Xamarin.Insights प्रारंभ करने में है:

Insights.HasPendingCrashReport += (sender, isStartupCrash) => 
{ 
    if (isStartupCrash) { 
    Insights.PurgePendingCrashReports().Wait(); 
    } 
}; 
Insights.Initialize("Your API Key"); 
बेशक प्रयोग करने योग्य जोड़ने के लिए धन्यवाद
+0

, लेकिन मैं व्यापार संस्करण के साथ अपने साथ लगता है। कृपया मुझे सुधारें अगर मैं गलत हूं। – RIYAZ

+0

कम से कम आज के लिए यह सभी Xamarin ग्राहकों के लिए मुफ्त और असीमित है। जब Xamarin.Insights की घोषणा की गई है तो मूल्य निर्धारण के बारे में यह वाक्य था: * पूर्वावलोकन के अंत में मूल्य निर्धारण की घोषणा की जाएगी, लेकिन ज़ैमरिन ग्राहकों के लिए कोई अतिरिक्त योजना नहीं होगी। * Https: //blog.xamarin। com/monitor-your-apps-with-xamarin-insights/ – Wosi

+0

अच्छा, यह अच्छा है :) @Wosi साझा करने के लिए धन्यवाद। – RIYAZ

संबंधित मुद्दे