2012-02-15 3 views
0

У меня есть класс DBApdater, доступ к которому осуществляется через множество AsyncTasks. Каждая операция, определенная в БД, должна вызывать функцию, записанную в классе DBAdappter, который называется open, insert или delete из db, а затем закрывает DB. Если один объект Async вызвал открытый через объект DbApater, как я могу предотвратить второй вызов AsyncTasks, чтобы вызвать его до тех пор, пока первый AsyncTask не позвонит в БД. Могу я использовать блокировку как общественного static Object myLock =new Object();Android Async Syncronization

и на открытом воздухе mentod написать

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

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

бы этот код работу. В принципе, вызывающий класс получит блокировку на открытом ментоде и освободит его только при вызове close.

Уважением,

Мухаммад Mateen

+0

Обычно вы синхронизировались на 'myLock', а не' myLock.getClass() '. 'notify()' не требуется. И 'myLock' определенно не будет' public'. –

+0

Этот код просто предотвратит одновременные вызовы 'open' и' close'. Это не помешает, например, «Thread1» открывает базу данных, «Thread2» изменяет базу данных, «Thread1» изменяет базу данных, «Thread2» закрывает базу данных. –

+0

ContentProvider: s ваши друзья - не смертельные враги, которые должны быть побеждены, засоряя ваши классы активности ссылками на объекты SQLiteDatabase. – Jens

ответ

0

Синхронизация доступа к базе данных через open() и close() методов является правильным подходом в моем сознании. Это должно сработать.

0

Я не знаком со спецификой потокобезопасной связи в разработке Android, но, глядя на ваше предложение с точки зрения разработчиков C#, это имеет смысл.