如何确保编辑文本字段(android)没有被任何其他线程锁定?

时间:2015-01-16 20:42:10

标签: android multithreading

我有一项活动要在某个远程数据库中搜索,有一个编辑文本字段来放置您的搜索关键字。当搜索第一次完成并且结果成功恢复时,我无法在该文本字段中写入,如此图screenshot中所示。 我的猜测是文本字段被另一个线程锁定,所以我需要验证猜测。 如果有人有其他想法,请与我分享

提前感谢。

2 个答案:

答案 0 :(得分:2)

只有应用程序的UI线程(主线程)才能操作UI元素。这似乎有些东西已经禁用了视图而没有重新启用它。

答案 1 :(得分:1)

正如@Larry Schiefer所提到的,只有UI线程才能访问UI元素。话虽如此,有多种方法可以访问UI线程,例如使用runOnUiThreadonPostExecute的{​​{1}}方法,因此确保UI仅存在是有价值的一次从一个来源访问。一种方法是为UI实现AsyncTask,这意味着所有更新UI的请求都会发布到Handler,这样只有Handler才能直接访问UI 。您可以在此处找到很多有关如何与用户界面进行通信的重要信息:https://developer.android.com/training/multiple-threads/communicate-ui.html

作为旁注,值得记住的是,由于Java支持并发性,如果您不小心编程,任何给定资源都可能同时被多个源访问。虽然有多种保护资源的策略,但一个有价值的工具是使用Handler,它基本上就像一把钥匙 - 没有钥匙意味着没有访问权限。下面剪切的简单代码可用于保护可从多个源访问的资源,以确保不会同时访问该资源:

Semaphore

上面的snipped声明一个Semaphore mySemaphore = new Semaphore(1); mySemaphore.acquire(); // Access resource mySemaphore.release(); 有一个许可,这意味着一次只能有一个调用者持有它,然后尝试获取Semaphore以访问该资源;访问资源后,Semaphore被释放。您可以在此处找到有关Semaphore的更多信息:http://developer.android.com/reference/java/util/concurrent/Semaphore.html