![]() |
1
2
这比简单地杀死一根线更困难。您可以在线程上调用interrupt(),但线程必须定期检查其中断状态并自行终止。 其次,您不希望在用户键入时立即启动线程。你将很快用线程生成压倒系统。在执行搜索之前实现100-200毫秒的等待时间,这样您就可以合理地确定用户已经完成了输入。谷歌的服务器可以处理负载,但手机无法处理。
编辑:要展开我的第一点,线程可能很难取消。在这种情况下,事件分派线程需要以某种方式告诉正在运行的线程它需要停止。你可以使用
您将遇到的下一个问题是是否已经对某个外部服务器进行了web调用。它将阻塞该线程,直到它回来,线程将无法自杀。这可能需要几秒钟。 那么让我们来播放一下-如果用户键入一个字符,而您的超时期限因任何原因而过期,并且进行了一个web调用,那么用户在超时期限过期的地方键入另一个字符以便进行另一个web调用呢?如果您的web调用需要5秒,那么第一个线程将继续运行,即使事件分派线程取消它,至少5秒。现在有两个线程进行web调用。 现在扩大范围。如果用户这样做并生成4或5个线程呢?这是你压倒手机资源的地方。我并不是告诉你们不要继续这样做,只是想指出该地区可能出现的问题。 |
![]() |
2
2
类似于:
在应用程序中搜索吗?要搜索的内容有多大?在sqlite中预加载所有数据,并检查来自web的更新数据,也许每隔一段时间? 否则我会说你应该限制你的应用程序尝试启动线程的次数。设置某种计时器:
只是一个想法,没试过这个 |
![]() |
3
0
创建线程是非常消耗的操作。因此,我建议使用一个线程,该线程随后将使用新的搜索字符串调用webservices。 |
![]() |
4
0
你的意思是 . 我认为你不需要开始几个线程来处理这个问题。使用android Auto Complete 使用 AutoCompleteTextView . 此外,不建议通过子类化java线程或实现接口来使用线程。你可以用 AsyncTask |
![]() |
user107586 · 如何处理等待句柄不会导致无限循环? 6 月前 |
![]() |
ron burgundy · 获取-释放语义是否跨线程传递?[副本] 6 月前 |
![]() |
BenjiFB · C#内存缓存:在一次操作中追加到列表? 6 月前 |
![]() |
András Takács · Python多线程问题 10 月前 |
|
András Takács · Python多线程错误 10 月前 |