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