如何检查ContentResolver是否正忙

时间:2012-01-29 21:21:04

标签: android android-contentprovider android-cursor

我有一个按钮,当用户点击此按钮时,它应该更新具有指定ID

的数据的状态
public void updateByClick(int id) {
    myCursor.moveToPosition(id);
    if (myCursor.getShort(myCursor.getColumnIndex(MyTable.STATUS)) == 0) {

        ContentValues cv = new ContentValues();
        cv.put(MyTable.STATUS, true);

        getContext().getContentResolver().update(MyTable.CONTENT_URI, cv,
                  MyTable._ID + "= ?", new String[] {String.valueOf(id + 1)});

    }
}

问题是,如果用户快速点击按钮(因此有很多updateByClick事件),那么多次更新操作调用(更新尚未发生,因此状态仍为== 0)

如何检查ContentResolver(或其他内容)是否正忙(当前正在更新)然后我可以阻止多次更新调用

2 个答案:

答案 0 :(得分:1)

我会用timeStamps解决这个问题。每次调用update方法时,都会创建一个带System.currentTimemillis()的timeStamp,并检查上次保存的timeStamp的差异。如果未达到阈值,则不会调用更新请求。

答案 1 :(得分:1)

一个简单的解决方案是简单地忽略快速进入的按钮:

long prevTouchTime = 0;
long touchTimeout = 1000;
public void updateByClick(int id) {
   long touchTime = System.currentTimeMillis();
   if (touchTime - prevTouchTime < touchTimeout)
        return;
   prevTouchTime = touchTime;
   //Do everything else
}