【问题标题】:How can I check if a ContentResolver is busy如何检查 ContentResolver 是否忙
【发布时间】:2012-01-30 05:28:44
【问题描述】:

我有一个按钮,当用户点击这个按钮时,它应该使用指定的 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(或其他)是否忙(当前正在更新),然后我可以防止多次更新调用

【问题讨论】:

    标签: android android-contentprovider android-cursor


    【解决方案1】:

    我会用时间戳解决这个问题。每次调用更新方法时,您都会使用System.currentTimemillis() 创建一个时间戳,并检查与上次保存的时间戳的差异。如果它没有达到阈值,则不要调用更新请求。

    【讨论】:

    • 我认为有很多方法可以解决我的问题,使用时间限制,标志,听众......但我想知道android系统中是否有任何方法可以帮助我没有这样黑客。谢谢。
    【解决方案2】:

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

    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
    }
    

    【讨论】:

    • 请查看我为@dmaxi 写的评论。谢谢
    猜你喜欢
    • 2018-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-15
    相关资源
    最近更新 更多