2012-02-15 6 views
0

AsyncTasks을 통해 액세스되는 DBApdater 클래스가 있습니다. DB에 정의 된 각 연산은 db에서 open, insert 또는 delete라고 불리는 DBAdappter 클래스로 작성된 함수를 호출 한 다음 DB를 닫아야합니다. 하나의 비동기 객체가 DbApater의 객체를 통해 open을 호출 한 경우 어떻게하면 AsyncTask이 DB에서 close를 호출 할 때까지 두 번째 AsyncTasks이 open을 호출하는 것을 방지 할 수 있습니까? 내가Android Async Syncronization

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

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

것 코드가 작동 쓰기 mentod

오픈 공공 static Object myLock =new Object(); 같은 잠금 장치를 사용할 수 있습니다. 기본적으로 호출 클래스는 열린 menthod에 잠금을 설정하고 close가 호출 될 때만 해제합니다. open()close() 방법을 통해 데이터베이스에 대한 액세스를 동기화

친절 감사를

무하마드 Mateen

+0

일반적으로 myLock.getClass()가 아니라'myLock'을 동기화합니다. 'notify()'는 필요하지 않습니다. 그리고'myLock'은 분명히'public'이 아니어야합니다. –

+0

그 코드는'open'과'close'에 대한 동시 호출을 막을 것입니다. 예를 들어'Thread1'은 데이터베이스를 열고'Thread2'는 데이터베이스를 수정하고'Thread1'은 데이터베이스를 수정하고'Thread2'는 데이터베이스를 닫습니다. –

+0

ContentProvider : s는 친구입니다. SQLiteDatabase 객체 참조로 Activity 클래스를 파기해야하는 필멸의 적입니다. – Jens

답변

0

내 마음에 올바른 접근 방식이다. 이것은 효과가있다.

0

안드로이드 개발에서 스레드 안전 통신의 세부 사항에 익숙하지 않지만 C# 개발자 관점에서 제안한 것을 보면 의미가 있습니다.