У меня есть класс 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
Обычно вы синхронизировались на 'myLock', а не' myLock.getClass() '. 'notify()' не требуется. И 'myLock' определенно не будет' public'. –
Этот код просто предотвратит одновременные вызовы 'open' и' close'. Это не помешает, например, «Thread1» открывает базу данных, «Thread2» изменяет базу данных, «Thread1» изменяет базу данных, «Thread2» закрывает базу данных. –
ContentProvider: s ваши друзья - не смертельные враги, которые должны быть побеждены, засоряя ваши классы активности ссылками на объекты SQLiteDatabase. – Jens