延迟 Filter.filter() 的过滤器请求的替代方法,因为 Delayer 接口是隐藏的



对于我写的适配器,我希望过滤器有一点延迟(以避免在每个重复的键上启动过滤器操作并等待几分之一秒,直到用户减慢他/她的键入速度,因为要过滤的列表可能非常大,过滤器操作将需要几个 100 毫秒)。

查看 Filter 类的源代码,它提供了这个机会,因为它有一个公共 Delayer 接口,用于在发布消息(通过 sendMessageDelayed())时获取延迟时间,以在单独的工作线程上执行实际过滤器(以脱离主 UI 线程)。它还会删除队列中尚未执行的任何先前消息(由于延迟)。

目前为止,一切都好。实现该接口并扩展 Filter 类似乎非常简单。

但是,由于某种原因,设置Delayer的函数被注释为@hide因此严格来说,不应使用它,并且可以在任何未来的SDK更新中删除。这意味着我依赖它是愚蠢的。

解决此问题的最佳方法是什么,而不必自己重新实现完整的 Filter 类(这似乎是一件愚蠢的事情)?

我想另一种选择是设置和使用我自己的处理程序线程并创建一个延迟消息来调用过滤器函数,但这似乎有点沉重?

实际上,

我认为最好的解决方案是拥抱Android的开源性质,并完全按照您(几乎)的建议进行操作:

自己重新实现完整的 Filter 类(这似乎很愚蠢) 要做的事情)

由于与Delay相关的代码已经生产多年,因此使用起来应该是安全的。

我刚刚从 API 23 复制了Filter代码并删除了@hide注释。我重命名了它以防止导入冲突,它似乎正在工作。


我将其添加到 Github 中,以便在以后的项目中轻松重用:

  • mobiRic/DelayFilter.java on Github Gist

相关内容

最新更新