0

私のアプリケーションは:

 Activity A that reads from sqlite database
 Service with notification that writes to the database
 on clicking Notification, Activity A opens up

ActivityA による読み取りは非常に小さなタスクですが (読み取りにかかる時間に関して)、サービスによるデータベースへの書き込みは非常に長くなります ( 5 ~ 10 分かかる場合があります) 。

サービスが実行されているときに通知をクリックすると、データベースから読み取る必要があるActivityAは、そのデータベースに既にサービスが書き込みを行っているため、読み取りを実行できません。

そのため、アクティビティ A はデータベースから読み取るために (5 ~ 10 分間) 待機する必要があります。

さらに調査すると、これに出くわしました

http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#beginTransactionNonExclusive()

これを sqliteopenhelper クラス内のメソッドに実装しようとすると、アプリケーションが最小 API 10 を使用しているためエラーが発生します。このメソッドを API 10 で動作させるにはどうすればよいですか、または並列データベース アクセスを行う他の方法はありますか?

4

1 に答える 1

0

データベースに並列アクセスする別の方法はありますか?

それを達成する方法は特にないと思います。データベースへの同期アクセスには、従来の Java 同期を使用する必要があります。

最も重要なことは、データベースへの接続が 1 つだけであることを確認する必要があることです(同時に 2 つの異なる接続から書き込み/読み取りを行うことはできません)。そしてSingletonの使い方を考えてみてください。この場合(および他の場合も)、非常に効率的でクリーンなソリューションであり、dbへのアクセスに関する多くの問題を回避できます。


タスクは 5 ~ 10 分続く可能性があるとおっしゃいました。同様のケースで、すべてのユーザーは、バックグラウンド eq でいくつかの計算を実行していることを知っておく必要があります。

たとえばリストにデータを表示している場合、これは遅延読み込みを使用する正当な理由です。

これらの記事もご覧ください。

于 2013-10-02T13:09:57.753 に答える