如何避免ANR对话框应用程序无响应

时间:2012-11-09 14:46:48

标签: android android-asynctask fragment

我正在开发一款Android应用,它使用在线服务,我需要加载我的片段。基本上,我喜欢菜单,每个按钮都会替换下面的片段。当我单击一个按钮时,片段开始被替换,如果我同时按下键盘上的另一个按钮,我会看到Application Not Responding对话框,然后单击Wait,我的Fragment加载成功。有没有办法防止这种情况发生?由于Web服务,我的应用程序将始终需要几秒钟才能加载。我在谷歌上看到,我可以使用AsyncTask,并在DoOnBackground方法上完成加载..我不知道这是否有效,但我甚至无法尝试,因为它不会让我改变那里的视图,它抛出一个错误,只有原始线程可以更改视图..我需要服务来完成加载我的视图,所以我甚至无法使用AsyncTask进行服务..我现在已经没有想法了!必须有办法做到这一点..我很感激建议!

3 个答案:

答案 0 :(得分:11)

  

有没有办法防止这种情况发生?

是的:不要在主应用程序线程上花这么长时间。使用StrictMode识别可能的罪魁祸首(磁盘I / O,网络I / O),并使用Traceview找出您正在做的其他可能需要太长时间的事情。

  

由于网络服务,我的应用程序将始终需要几秒钟才能加载。

这应该在后台线程中完成。

  

我在Google上看到,我可以使用AsyncTask,并在DoOnBackground方法上完成加载..我不知道这是否有效,但我甚至无法尝试,因为它不会让我改变查看那里,它抛出一个错误,只有原始线程可以更改视图

这就是您使用onPostExecute()方法更新视图的原因,如the documentation for AsyncTask中所述。

答案 1 :(得分:0)

您必须在AsyncTask的onPostExecute()函数中对ui进行更改。

答案 2 :(得分:0)

永远不要在主thred的上下文中执行数据库操作或内容提供程序操作。迟早您将遇到应用程序无响应错误。 ANR不是一个好习惯。