2012-02-15 8 views
0

AsyncTasksでアクセスするDBApdaterクラスがあります。 DB上で定義された各操作は、dbからopen、insertまたはdeleteと呼ばれるクラスDBAdappterで記述された関数を呼び出してから、DBを閉じる必要があります。 1つのAsyncオブジェクトがDbApaterのオブジェクトを通してopenを呼び出すと、最初のAsyncTaskがDB上でcloseを呼び出すまで、2番目のAsyncTasksがopenを呼び出すのを防ぐことができます。私はAndroid Async Syncronization

public void open() 
{ 
     synchronizaed(myLock.getClass) 
     {///Open the DB 
     } 
} 

public void close() 
{ 
    synchronizaed(myLock.getClass) 
     {///close the DB 
     } 
    notify(); 
} 

だろうこのコードの動作を記述しmentod

とオープンの公共static Object myLock =new Object();のようなロックを使用することができます。基本的に、呼び出し側のクラスは、開いているmenthodのロックを取得し、closeが呼び出されたときにのみ解放します。

種類よろしく、open()close()メソッドを介してデータベースへのアクセスを同期

ムハンマドMateen

+0

通常、myLock.getClass()ではなく、myLockで同期します。 'notify()'は必須ではありません。また、「myLock」は間違いなく「公開」にする必要があります。 –

+0

そのコードは 'open'と' close'への同時呼び出しを防ぎます。例えば、 'Thread1'はデータベースを開き、' Thread2'はデータベースを変更し、 'Thread1'はデータベースを変更し、' Thread2'はデータベースを閉じます。 –

+0

ContentProvider:sはあなたの友人です - あなたのアクティビティクラスをSQLiteDatabaseオブジェクトリファレンスで捨てることによって敗北しなければならない致命的な敵ではありません。 – Jens

答えて

0

は私の心の中で適切なアプローチです。これはうまくいくはずです。

0

私はアンドロイド開発でスレッドセーフな通信の詳細に精通していませんが、C#開発者の視点からあなたの提案を見れば意味があります。