2012-02-15 136 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#开发点是有意义的建议。