3

我正在开发一个使用在线服务的 Android 应用程序,我需要加载我的片段。基本上,我有一个菜单,每个按钮都替换了下面的 Fragment。当我单击一个按钮时,片段开始被替换,如果同时按下键盘上的另一个按钮,我会看到应用程序无响应对话框,然后单击等待,我的片段成功加载。

有没有办法防止这种情况发生?由于网络服务的原因,我的应用程序总是需要几秒钟才能加载。我在谷歌上阅读,我可以使用AsyncTask,并完成加载该doOnBackground方法..我不知道这是否有效,但我什至不能尝试,因为它不会让我改变那里的视图,它会抛出只有原始线程的错误可以更改视图。而且我需要该服务来完成加载我的视图,所以我什至无法使用 AsyncTask 执行该服务。

我现在没有主意了!必须有办法做到这一点。我很感激建议!

4

3 回答 3

11

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

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

由于网络服务的原因,我的应用程序总是需要几秒钟才能加载。

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

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

这就是您从该方法更新视图的原因onPostExecute()如.AsyncTask

于 2012-11-09T14:51:31.163 回答
0

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

于 2012-11-09T14:52:29.383 回答
0

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

于 2013-11-07T17:38:50.757 回答