Xamarin.Android DateTime相关的三星设备崩溃

时间:2019-03-20 13:09:34

标签: android xamarin xamarin.android samsung-mobile

我们正在基于Xamarin的跨平台应用程序中的Android上经历DateTime解析/实例化相关应用程序崩溃。崩溃仅发生在Samung设备上,主要是Android 8和9的S8,S8 +和Note8。不幸的是,崩溃报告中的堆栈跟踪仅由几行组成。遗憾的是,由于我们没有关于谁的信息,因此无法联系用户以获取更多信息。

问题的表现形式各有千秋,

使用无效参数调用DateTime构造函数

System.ArgumentOutOfRangeException: Year, Month, and Day parameters describe an un-representable DateTime.
  Module "System.DateTime", line 0, in DateToTicks
    DateToTicks(System.Int32 year, System.Int32 month, System.Int32 day)
  Module "System.DateTime.", line 0, in ctor
    ctor(System.Int32 year, System.Int32 month, System.Int32 day, System.Int32 hour, System.Int32 minute, System.Int32 second)
  Module "System.Threading._ThreadPoolWaitCallback", line 0, in PerformWaitCallback
    PerformWaitCallback()

DateTime构造函数中的NullReferenceException

System.NullReferenceException: Object reference not set to an instance of an object
  Module "System.DateTime.", line 0, in ctor
    ctor(System.Int32 year, System.Int32 month, System.Int32 day, System.Int32 hour, System.Int32 minute, System.Int32 second)
  Module "System.Threading._ThreadPoolWaitCallback", line 0, in PerformWaitCallback
    PerformWaitCallback()

但是,也有一些指向JSON库的相关崩溃

Json DateTimeParser ParseZone中的NullReferenceException

System.NullReferenceException: Object reference not set to an instance of an object
  Module "Newtonsoft.Json.Utilities.DateTimeParser", line 0, in ParseZone
    ParseZone(System.Int32 start)
  Module "Newtonsoft.Json.Utilities.DateTimeParser", line 0, in ParseTimeAndZoneAndWhitespace
    ParseTimeAndZoneAndWhitespace(System.Int32 start)
  Module "System.Threading._ThreadPoolWaitCallback", line 0, in PerformWaitCallback
    PerformWaitCallback()
Json DateTimeParser Parse2Digit中的

IndexOutOfRangeException

System.IndexOutOfRangeException: Index was outside the bounds of the array.
  Module "Newtonsoft.Json.Utilities.DateTimeParser", line 0, in Parse2Digit
    Parse2Digit(System.Int32 start, System.Int32& num)
  Module "System.Threading._ThreadPoolWaitCallback", line 0, in PerformWaitCallback
    PerformWaitCallback()
Json DateTimeParser ParseChar中的

NullReferenceException

System.NullReferenceException: Object reference not set to an instance of an object
  Module "Newtonsoft.Json.Utilities.DateTimeParser", line 0, in ParseChar
    ParseChar(System.Int32 start, System.Char ch)
  Module "System.Threading._ThreadPoolWaitCallback", line 0, in PerformWaitCallback
    PerformWaitCallback()

这些只是一些崩溃报告,还有一些崩溃报告,但是它们都朝着同一方向发展。

到目前为止我已经尝试了什么:

  • 研究了可能导致问题的代码和开源库代码
  • 服务器响应失败,返回无数种类的有效/无效日期值
  • 编写了一个测试应用,该应用可以解析无数种类的有效/无效日期值

到目前为止我发现了什么

  • 我根本无法重现该问题
  • 如上所述,它仅出现在Samsung * 8设备上
    • 在其他Android设备上不会发生
    • 在iOS或Windows应用中也不会发生
  • 在我们自己的代码中,不太可能会出现问题,因为我们不使用这些构造函数(并且很少一起手动处理日期时间值)

是否有人遇到过类似问题或对我可以继续寻找哪个方向有想法?我完全一无所知,不胜感激。

1 个答案:

答案 0 :(得分:0)

经过大量调查,结果发现此问题与在32位apk部署到64位设备上的Samsung设备上的Xamarin应用程序中累积的随机NullReferenceExceptions有关。过去由于另一个问题,我们不得不禁用64位版本,在解决该问题并再次部署64位版本之后,我们还没有收到类似的崩溃报告。