2012-02-15 131 views
0

我有一個是通過許多AsyncTasks訪問的DBApdater類。在數據庫上定義的每個操作都必須調用DBAdappter類中寫入的函數,該函數稱爲打開,插入或從數據庫中刪除,然後關閉數據庫。如果一個異步對象通過DbApater的對象調用open,我怎麼能阻止第二個AsyncTasks調用open,直到第一個AsyncTask在DB上調用close。我能使用像公共static Object myLock =new Object();的Android異步同步化

,並在打開的鎖mentod寫

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

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

將這段代碼工作。基本上,調用類會在打開的menthod上獲得一個鎖,並且只有在調用close時纔會釋放它。

親切的問候,

穆罕默德MATEEN

+0

通常,您將在'myLock'上進行同步,而不是'myLock.getClass()'。 'notify()'不是必需的。 myLock絕對不應該是'public'。 – 2012-02-15 11:40:48

+0

該代碼將阻止併發調用「open」和「close」。它不會阻止例如「Thread1」打開數據庫,「Thread2」修改數據庫,「Thread1」修改數據庫,「Thread2」關閉數據庫。 – 2012-02-15 11:49:58

+0

ContentProvider:s是你的朋友 - 不是凡人的敵人,必須通過拋棄你的Activity類和SQLiteDatabase對象引用來擊敗敵人。 – Jens 2012-02-15 13:12:17

回答

0

同步通過open()close()方法對數據庫的訪問是在我的腦海正確的方法。這應該工作。

0

我不熟悉線程安全的通信在Android發展的具體情況,但看着從一個C#開發點是有意義的建議。