2011-09-20 14 views
11

AndroidのドキュメントはスレッドセーフなContentProviderを作成するには?

のContentProviderメソッドは、異なるプロセスとスレッド内のさまざまなContentResolverの オブジェクトから呼び出すことができ、彼らはスレッドセーフな方法で

を実装する必要があり、私はこの記事を見つけたと言います既にスレッドセーフだと言っているのですか? Android - sqlite content providers and multithreading

スレッドセーフな方法ContentProviderを作成する方法が不思議ですか?それは私が方法syncronized

public synchronized Uri insert (Uri uri, ContentValues values) { 

} 
+0

私は同じデータベース/テーブルにデータを挿入する複数のスレッドを持っています – kakopappa

+0

他の人が書いたことを読んでください:[AndroidのSQLiteのベストプラクティスは何ですか](http://stackoverflow.com/questions/2493331/) sqlite-on-android/3689883#3689883)を使用しています。それはあなたのために物事を明確にする必要があります。 – JJD

+0

複数のスレッドを更新して削除するとどうなるでしょうか – JPM

答えて

11

を削除/挿入/更新を行う場合は、すべてのメソッド​​、を作るが、あなたはを行う前に、それが絶対に必要であることを確認することができ、十分です。基礎となるデータソースが既にスレッドセーフである場合、メソッド​​はコストがかかる可能性があります。詳細については、このトピックの私のblog postを参照してください。

+1

各メソッドを同期させても、何が更新要求と同時に削除要求を受け取ることができないので、スレッドの安全性が損なわれます。これらのメソッドのそれぞれは、セマフォがクリアされるのを待ってから続行する必要があります。またはこれらのメソッドはすべてキューを使用しています... – JPM

+4

@JPMええ、あなたは絶対に正しいです。 'SQLiteDatabase'を基本ソースとして使用している場合、これは問題ではありません(' SQLiteDatabase'はスレッドセーフです)。それ以外に、保証はありません。データソースを同期するか、 'ContentProvider'へのアクセスを同期させる必要があります(私は前者を提案します)。 –

+0

ContentProviderが使用するDatasource/DataBaseHelperクラスをどのように同期しますか?たぶん私は質問としてこれを尋ねるべきです...他の人がこのサイトで答えなかったようです。 – JPM

関連する問題