【发布时间】:2010-11-04 14:17:24
【问题描述】:
我创建了一个类,它是 Thread 的扩展。此类访问 Web 服务并在屏幕上抛出一些数据。我不关心这些数据的持久化(屏幕显示搜索结果)。
目前,用户只需键入 EditText 并单击搜索按钮。我想去掉搜索按钮并实现类似于 Google 的即时搜索的功能,在您输入时,搜索结果会得到更新。
这意味着,随着用户键入,搜索参数会发生变化。 我希望能够终止当前正在运行的线程(如果当前正在运行)并使用新的搜索字符串生成一个新的线程。如何做到这一点?我可以用 Thread 来做,还是需要使用新对象?
【问题讨论】:
-
这不应该在移动设备中发生。大概您使用的是 3g 而不是 wifi,即使是 1 个搜索结果也可能需要很长时间。您必须缓存用户可以键入的每个可能组合的搜索结果。疯了吧。根据数据,您可能只想在启动时立即获取所有数据,然后使用自动完成功能在本地搜索,如下所述。如果你的数据是网页,那就别想了。
-
正在搜索的数据列表一个单词列表。它最多返回 25 个单词。当您键入“w”时,Web 服务会要求输入以“w”开头的单词。如果您随后键入“wi”,Web 服务会要求输入以“wi”开头的单词。我想要完成的是,如果当用户键入“i”时对“w”的 Web 服务调用仍然处于活动状态,它会取消它并尝试对“wi”的 Web 服务调用。此外,我在调用 Web 服务之前设置了 2 秒的睡眠时间;因此,如果用户在 2 秒内输入“w”然后输入“wi”,则不会使用带宽,因为第一个呼叫从未打出。
-
网络服务调用发生在线程中;因此,通过停止 Web 服务调用,我实际上是指停止包含它的线程。
标签: android multithreading android-asynctask