作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个按钮,当用户点击它时,它会更新整个 UI( TextView 、图形)。 UI 的内容来自 SQLite 数据库,我将更新函数命名为 loading()。你可以想象,在 loading() 内部,有很多数据库操作和 UI 更新。当数据量变大时,这个loading()的时间会变长,所以按钮会在按下状态的时间变长。
我尝试使用 asynctask 来处理这种情况,以便出现进度对话框而不是卡住按钮,但我无法将 loading() 方法放在 的 doinbackground() 上asynctask 因为 doinbackground() 无法触及从其 Activity 的 onCreate() 方法声明的 UI 组件。
我不想重写 loading() 函数。
还有其他方法吗?请帮忙,如果可以的话,请提供一些例子,我很感激。
最佳答案
如果您在主应用程序线程(也称为 UI 线程)上运行耗时的任务,您的 UI 将无响应并最终看到著名的 Application Not Responding (ANR) dialog。 .
推荐的方法是在 AsyncTask 中执行这些操作并在 doInBackground()
中调用 publishProgress()
。将您的 UI 更新逻辑放在 AsyncTask
的 onProgressUpdate()
中。 onProgressUpdate()
将在您调用 publishProgress()
后在主应用程序线程上自动调用。
关于java - 如何让UI在长时间运行时不被阻塞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12693419/
我是一名优秀的程序员,十分优秀!