我有一個是通過許多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
通常,您將在'myLock'上進行同步,而不是'myLock.getClass()'。 'notify()'不是必需的。 myLock絕對不應該是'public'。 – 2012-02-15 11:40:48
該代碼將阻止併發調用「open」和「close」。它不會阻止例如「Thread1」打開數據庫,「Thread2」修改數據庫,「Thread1」修改數據庫,「Thread2」關閉數據庫。 – 2012-02-15 11:49:58
ContentProvider:s是你的朋友 - 不是凡人的敵人,必須通過拋棄你的Activity類和SQLiteDatabase對象引用來擊敗敵人。 – Jens 2012-02-15 13:12:17