Xamarin.android android 4.1+;

Xamarin.android android 4.1+;,xamarin.android,Xamarin.android,我目前正在使用Monodroid/Xamarin开发一个跨平台应用程序。它使用SQLite.net数据库,目前我只构建了Android用户界面 在应用程序中,后台线程上有一个长时间运行的方法,该方法执行多个数据库读写操作 我在运行安卓4.2.2的Nexus7上测试了这个长时间运行的方法,似乎在第二次屏幕旋转之后,抛出了一个SQLite异常,应用程序崩溃了 异常堆栈跟踪随屏幕的旋转而变化,但异常始终是对象,而不是Prepare2中的实例 有趣的是,在运行4.1.2的三星Galaxy S2上进行测试

我目前正在使用Monodroid/Xamarin开发一个跨平台应用程序。它使用SQLite.net数据库,目前我只构建了Android用户界面

在应用程序中,后台线程上有一个长时间运行的方法,该方法执行多个数据库读写操作

我在运行安卓4.2.2的Nexus7上测试了这个长时间运行的方法,似乎在第二次屏幕旋转之后,抛出了一个SQLite异常,应用程序崩溃了

异常堆栈跟踪随屏幕的旋转而变化,但异常始终是对象,而不是Prepare2中的实例

有趣的是,在运行4.1.2的三星Galaxy S2上进行测试时,仍然会发生异常,但这是一个不同的异常。 此外,在三星Galaxy Tab 2和仿真器上进行测试时,根本不会抛出错误,该方法完成得很好

任何想法、提示、建议都将不胜感激

作为一个附带问题——在我所看到的所有使用Xamarin的跨平台应用程序中——数据库层和/或存储库始终是静态的——这是什么原因


谢谢大家

很难从您所写的内容中找出问题所在-如果您包含一些关于如何从应用程序访问数据库的代码,这会更容易

但是,我怀疑这里的问题是由于UI
活动的生命周期与它与SQLite数据库的交互方式之间的某种交互

默认情况下,当您旋转一个
活动
时,现有实例将被销毁并创建一个新实例-您的旧活动将被调用以将其状态存储在
SaveInstanceState
中,您的新旋转活动将在
OnCreate
中通过捆绑包被调用

这就是为什么在示例中数据库层通常是静态的/单例的——这是一种允许多个活动/组件共享同一数据库实例的简单方法


我猜您的活动在创建过程中对数据库做了一些操作,并且在每次旋转/创建之后都会调用它?或者,您的长时间运行的方法可能是在托管它的活动完成并被处置后尝试执行某些操作?

最后,这是mulithreading和Linq不能很好地配合的问题。感谢斯图尔特的回答。

嗨,非常感谢你的回答。不幸的是,在这种情况下不可能发布任何代码。我知道轮换是如何与活动一起工作的,我相当确定OnCreate中没有任何东西会导致这种情况。如果有,我测试过的所有三个版本的Android都会显示错误吗??而目前它只在果冻豆和更高?