RIY*_*YAZ 14 c# xamarin.ios xamarin.android xamarin
我们都知道移动设备是紧凑型平台,我们在构建应用程序时必须要看很多东西.它可能是任何东西,例如Memory
Performance
Resolutions
Architecture
Implementation
等等.我们永远不知道什么时候和什么原因导致应用程序在玩应用程序时崩溃了一个大问题,它可能随时发生
例如应用启动,加载屏幕,API调用,绑定数据,加载图像等
相信我有时很难找到应用程序中出现问题的位置和原因.我在论坛,技术社区和团体中看到了许多与同一问题相关的帖子,人们通常在这些问题上提问:
如何识别问题及其原因?
RIY*_*YAZ 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
}
Run Code Online (Sandbox Code Playgroud)
实施代码的时间:在应用程序Application
文件中订阅以下事件或Splash Activity
.我在这种情况下使用Application.
AppDomain.CurrentDomain.UnhandledException += CurrentDomainOnUnhandledException;
TaskScheduler.UnobservedTaskException += TaskSchedulerOnUnobservedTaskException;
Run Code Online (Sandbox Code Playgroud)
[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
}
Run Code Online (Sandbox Code Playgroud)
注意:您可以在Device Storage中找到例外记录文件 文件管理器>例外文件夹> fatal.txt
干杯!!
除了自己动手之外,您还可以使用Xamarin.Insights,因为它可以免费用于Xamarin用户,并且已经实现了所有平台.您可以在线接收使用情况报告,崩溃报告等,而无需用户手动向您发送日志文件.
接收崩溃报告时,您唯一需要做的就是在启动应用时初始化Xamarin.Insights:
Insights.HasPendingCrashReport += (sender, isStartupCrash) =>
{
if (isStartupCrash) {
Insights.PurgePendingCrashReports().Wait();
}
};
Insights.Initialize("Your API Key");
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
12258 次 |
最近记录: |