0

私は現在、Monodroid/Xamarin を使用してクロスプラットフォーム アプリケーションに取り組んでいます。SQLite.net データベースを使用しており、現時点では Android UI のみを構築しています。

アプリケーションには、複数のデータベースの読み取りと書き込みを行うバックグラウンド スレッドで実行時間の長いメソッドがあります。

Android 4.2.2 を実行している Nexus 7 でこの長時間実行されるメソッドをテストしていましたが、2 回目の画面回転後に SQLite 例外がスローされ、アプリケーションがクラッシュしたようです。

例外スタック トレースは、画面を回転するタイミングによって異なりますが、例外は常に、Prepare2 内のインスタンスに設定されていないオブジェクトです。

興味深いのは、4.1.2 を実行している Samsung Galaxy S2 でテストすると、例外が発生することですが、これは別の例外です。さらに、Samsung Galaxy Tab 2 とエミュレーターでテストすると、エラーはまったくスローされず、メソッドは問題なく完了します。

アイデア、ヒント、提案をいただければ幸いです。

副次的な質問として、私が Xamarin を使用して見たすべてのクロス プラットフォーム アプリケーションで、データベース レイヤーやリポジトリは常に静的です。その理由は何ですか?

みんな、ありがとう

4

2 に答える 2

0

最終的に、これはマルチスレッドと Linq がうまく連携しないという問題であることが判明しました。答えてくれたスチュアートに感謝します。

于 2013-06-14T00:42:36.047 に答える
0

あなたが書いたものから問題を特定するのは難しいです.アプリからデータベースにアクセスする方法についてのコードを含めれば、より簡単になります.

ただし、ここでの問題は、UI のライフサイクルとActivityそれが SQLite データベースと対話する方法との間の相互作用によるものではないかと思います。

デフォルトでは、 を回転するActivityと、既存のインスタンスが破棄され、新しいインスタンスが作成されます。古いアクティビティが呼び出されてその状態が保存されSaveInstanceState、新しい回転されたアクティビティが のバンドルで呼び出されOnCreateます。

これが、サンプルでデータベース層がしばしば静的/シングルトンである理由です。これは、同じデータベース インスタンスを複数のアクティビティ/コンポーネントで共有できるようにする簡単な方法です。

あなたのアクティビティはデータベースで何かをしていると思いますOnCreate-そして、これは各ローテーション/作成の後に呼び出されていますか? または、長時間実行されるメソッドが、それをホストしているアクティビティが終了して破棄された後に何かをしようとしている可能性がありますか?

于 2013-05-24T07:17:08.420 に答える