Android Xamarin应用程序中System.Threading.Tasks.RangeWorker.FindNewWork中的NullReferenceException

问题描述 投票:7回答:3

在我使用Xamarin创建的Android原生应用中,我在HockeyApp中收到以下崩溃报告:

Xamarin caused by: android.runtime.JavaProxyThrowable: System.NullReferenceException: Object reference not set to an instance of an object
  at System.Threading.Tasks.RangeWorker.FindNewWork (System.Int64& nFromInclusiveLocal, System.Int64& nToExclusiveLocal) [0x00000] in <8f1acca5a43d45c5b8d35add5a11806a>:0 
  at System.Threading.Tasks.RangeWorker.FindNewWork32 (System.Int32& nFromInclusiveLocal32, System.Int32& nToExclusiveLocal32) [0x00000] in <8f1acca5a43d45c5b8d35add5a11806a>:0 
  at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback () <0xec919968 + 0x00033> in <8f1acca5a43d45c5b8d35add5a11806a>:0

我无法弄清楚导致此异常的原因,因为堆栈跟踪仅包含.net代码。我查看了框架的源代码,看看我是否可以理解它,但无济于事。

我也在我最喜欢的搜索引擎中尝试了很多不同的搜索,但没有发现任何类似问题的帖子/文章。

从与这些崩溃相关的数据来看,它似乎只是在三星设备(S8,S8 +和Note8)上发生的问题。我无法100%确定它不会影响其他设备,但我只有那些崩溃报告。

知道什么可能导致那些崩溃吗?我是否在使用线程做错了,可能还有取消令牌?我有没有正确处理的条件?

任何有助于进一步解决这个问题的帮助都会受到欢迎。

谢谢

编辑:

我知道没有太多要做但是因为这是我在HockeyApp中获得的唯一堆栈跟踪而我无法复制,我不知道是什么代码导致了这一点。

我正在寻找的是更多关于什么可能导致Mono线程代码在我自己不管理线程时具有空引用异常的线索。或者这个堆栈跟踪只是一个红色的鲱鱼,我需要在其他地方寻找?

.net multithreading xamarin xamarin.android
3个回答
1
投票

引起我注意的是FindNewWork32调用 - link for the .NET implementation。您的应用程序可能会针对32位架构进行编译,而您提到的三星设备则具有64位处理器。

This Microsoft paper展示了如何将应用程序定位到一个或多个Android支持的CPU架构。您可能需要定位多个平台:

要定位多个CPU体系结构,您可以选择多个ABI(以更大的APK文件大小为代价)。您可以使用每个选定的ABI选项生成一个包(.apk)(在设置包装属性中描述)为每个支持的体系结构创建单独的APK。

您不必选择arm64-v8a或x86_64来定位64位设备;在64位硬件上运行您的应用程序不需要64位支持。例如,64位ARM设备(例如Nexus 9)可以运行为armeabi-v7a配置的应用程序。启用64位支持的主要优点是使您的应用程序可以处理更多内存。


3
投票

你应该在回调后立即致电.IsCompleted.Wait()。如果在Context对象可能消失之前执行此操作,并且如果您的代码正在访问那些Context对象将被任意为null(已删除)。如果你调用Task.Wait()它会阻塞线程,然后在worker抛出它时抛出一个AggregateException。尝试使用try catch块来处理异常。

问题JavaProxyThrowable并不总是因为调用服务而发生,可能是你的活动在某些地方无效。您应该在使用活动上下文之前检查null。


0
投票

我知道这个答案并不是针对您的问题,但是当您处理异常消息时,如此简短,检查系统范围的日志记录总是一个好主意。对于Android,您可以使用dmesg命令(它为您提供/var/log/messages文件的内容)获取更多信息。

祝好运

© www.soinside.com 2019 - 2024. All rights reserved.