2013-04-02 2 views
2

웹 서비스에서 마스터 데이터를 다운로드하는 데 사용되는 비동기 작업을 확장하는 DownLoadData 클래스가 있습니다. SQLite 데이터베이스에는 10 개의 마스터 테이블이 있으며 각각에는 별도의 웹 서비스 호출이 필요합니다. 따라서 DownLoadData 작업에는 10 개의 스레드가 있습니다. 각각은 각각의 웹 서비스를 호출하고 데이터를 수신 한 다음 해당 테이블에 삽입합니다.JellyBean에서 오류가 발생하는 SQLite에서 트랜잭션 사용

_onPreExecute()_에서 거래를 시작하고 모든 스레드가 완료되었는지 확인한 후 _onPostExecute()_에서 거래를 종료합니다.

문제는이 접근법이 ICS 버전까지 완벽하게 작동한다는 것입니다. JellyBean에서는 작동하지 않는 것 같습니다. 응용 프로그램은 단지이 로그 캣 메시지와 함께 60 초마다 응답 : 나는 또한 같은 DB 인스턴스가 모든 스레드를 건너 사용하고

public LocalDatabase beginTransact() { 

    mdbHelper = new DatabaseHelper(ctx); 
    mdb = mdbHelper.getWritableDatabase(); 
    execSQL("BEGIN"); 
    return this; 
} 

public void endTransact() { 

    execSQL("END"); 
    mdbHelper.close(); 
} 

:

04-02 14:53:23.263: W/SQLiteConnectionPool(1409): The connection pool for database '/data/data/com.c2info.liveorder/databases/DB' has been unable to grant a connection to thread 117 (AsyncTask #2) with flags 0x1 for 30.010002 seconds. 

04-02 14:53:23.263: W/SQLiteConnectionPool(1409): Connections: 0 active, 1 idle, 0 available. 

내가 시작하고이 같은 트랜잭션을 종료.

답변

0

모든 스레드에 대해 단일 트랜잭션이 아닌 단일 트랜잭션으로 각 개별 스레드를 처리하여 JellyBean의 문제점을 극복했습니다.