如何在Java中实现javascript setTimeout函数

时间:2010-11-01 13:06:38

标签: android search asynchronous settimeout

我目前正在尝试在Android中集成实时搜索功能。我使用自定义的自动完成小部件。小部件本身为我提供了一个阈值,只有在输入一定数量的字符后才启动查询。但我还想要的是,查询只会启动,比如用户已经停止输入2秒钟。

当我用AsyncTask加载我的内容时,我尝试通过在开头调用Thread.sleep()来阻止doInBackground函数。如果用户然后继续键入该程序将查看现有任务,取消它并开始新任务。这是我的想法。但它并没有像我预期的那样发挥作用。有时,即使用户仍在键入,它也会发出查询,有时在用户停止输入后会取消查询。

您对此有什么想法,或者可能是解决此问题的更好方法吗?

以下是代码段:

1。在文本上调用的函数更改:

public void afterTextChanged(Editable s) {
    if(mWidget.enoughToFilter()) {
        if(mTask != null && mTask.getStatus() != Status.FINISHED) {
            mTask.cancel(true);
        }

        mTask = new KeywordSearchLoader(mActivity, 
                mItems);

        mTask.execute(s.toString());

    }
}

2。 doInBrackground

try {
    Thread.sleep(Properties.ASYNC_SEARCH_DELAY);
} catch (InterruptedException e) {
    Log.e(TAG, "the process was interrupted while sleeping");
    Log.w(TAG, e);
}

由于 菲尔

1 个答案:

答案 0 :(得分:2)

创建Handler并使用.postDelayed(..)在延迟一段时间后运行后台任务。

如果用户按下该键,请拨打handler.removeCallback(..),然后再次.postDelayed(..)添加新的延迟回拨。