0

私は多くの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つある場合は、他のタスクが待機している必要があります。この状況に対処する方法は?

4

1 に答える 1

0

データベース操作でいくつかのカーソルを閉じていません。挿入および更新操作を実行した後、データベースオブジェクトが解放されないようにします。すべてのカーソルを閉じた後、私のアプリケーションは正常に動作しています。

于 2012-08-02T15:32:01.343 に答える