我正在开发一个包含大量数据库操作的小型应用程序。基本上它是一个选项卡活动,其中有 3 个选项卡。每个选项卡将通过解析 xml 文件显示数据。3 个选项卡活动使用相同的 db 对象,因此我只能看到 2 个填充数据的选项卡,其中第 3 个选项卡始终显示我创建的进度对话框。以下是我填充数据库的异步任务。
protected void onPreExecute() {
super.onPreExecute();
sdbop = new SDBOperations(context);
hdbop = new HDBOperations(context);
pdbop = new PDBOperations(context);
sdbop.open();
hdbop.open();
pdbop.open();
}
@Override
protected Void doInBackground(UpdateXML... statuslist) {
for(UpdateXML status:statuslist){
if(status==UpdateXML.C){
checkStatusAndPopulateDB(status,null);
continue;
}
String url = getUpdateURL(status);
String xml = XMLParser.getXmlFromUrl(url);
if(xml!=null)
checkStatusAndPopulateDB(status,xml);
}
return null;
}
private void checkStatusAndPopulateDB(UpdateXML status, String result) {
switch (status) {
case S:
sdbop.open();
dropTable();
insertIntoSTable(result);
sdbop.close();
updateSList();
break;
case H:
hdbop.open();
dropHTable(hdbop);
insertIntoHTable(hdbop,result);
hdbop.close();
updateHList();
case P:
pdbop.open();
dropPTable(pdbop);
insertIntoPTable(pdbop, result);
pdbop.close();
updatePList();
break;
case C:
updateLView();
break;
default:
break;
}
所以一切正常。但是 db 对象可以被 3 个任务连续访问。这样我的一个选项卡始终处于等待阶段,并且视图也在进行中。所以,如果有一个任务正在访问数据库,其他任务应该在等待。如何处理这种情况?