美好的一天。我正在开发Android应用程序,我有超过一年的开发经验,这就是它如何。首先我们尝试在本地服务器上执行所有文件(我们支持PC,所有的php文件和服务器都在那里)我开始使用android开发官方指南连接到asynctask内的服务器而没有.get()方法不能保存ui线程,所有大型工作都是在工作线程中完成的,而不是在ui上。在本地服务器上一切都很完美好吧,应用程序将永远不会挂起或冻结!昨天我们将所有服务器常量更改为公开,并且我惊讶地发现应用程序一旦连接到服务器并从中获得响应就开始冻结。它冻结(挂起)几秒钟引起ANR,之后很长一段时间它变得反应灵敏。我整天都在谷歌但是我的惊讶问题甚至没有一点暗示。我的问题是下一个。如果服务器无法工作,那么android会冻结吗?快速(发送和接收数据),或者不能异步ous一次向所有客户发送响应?如果服务器与ui冻结无关,生病了我的项目代码,虽然不能有任何问题。非常感谢,请帮助公司抱怨我不专业的工作:(但我打赌它是服务器问题!
答案 0 :(得分:0)
最后做研究并尝试每一种可能的情况我都找到了解决方案。人们从我自己的错误(主要是我的同事:)的错误中取得榜样)从未做过下一步!如果你想要每5秒执行一些代码永远不要使用Thread!至于你使用Thread.sleep(//some seconds)
每个例子运行一些代码,如果你调用这个方法不在asynctask里面它会实际阻止ui线程所以请避免它。在我的情况下是android默认导航抽屉里面的一个线程,它每5秒执行一次asynctask,检查是否有新的传入消息导致实际应用程序冻结(虽然它很奇怪,因为在本地服务器上它永远不会发生,我猜是因为响应延迟,在本地它非常快,所以我们没有注意到任何冻结)你总是使用ScheduledExecutorService。(http://developer.android.com/reference/java/util/concurrent/ScheduledExecutorService.html)谢谢大家的帮助!