私は多くのdb操作を含む小さなアプリケーションを開発しています。基本的にはタブアクティビティで、3つのタブがあります。各タブには、xmlファイルを解析してデータが表示されます。3つのタブアクティビティが同じdbオブジェクトを使用しているため、データで満たされた2つのタブのみを表示できます。3つ目のタブには、私が作成した進行状況ダイアログが常に表示されます。以下は、dbにデータを入力している私の非同期タスクです。
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つのタスクから継続的にアクセスできます。そのため、私のタブの1つは常に待機段階にあり、ビューも進行中です。したがって、dbにアクセスしているタスクが1つある場合は、他のタスクが待機している必要があります。この状況に対処する方法は?