【问题标题】:Android - Show progress while long code running in main activity UI thread [closed]Android - 在主活动 UI 线程中运行长代码时显示进度[关闭]
【发布时间】:2012-11-06 23:18:04
【问题描述】:

我已经看到这个问题被问了很多次,但没有办法做到这一点。我在主 UI 线程中有更多不同的代码部分(有时需要超过 10 秒),并希望向用户显示一些进度。我不会重做所有代码来尝试在单独的线程中移动所有不同部分的代码(已经是一个非常复杂的应用程序),同时也会冻结需要在继续之前执行代码的主线程,所以不要建议使用 Thread/Handler/AsyncTask因为他们不会这样做。

我尝试过的一件事是从我正在使用的自定义视图的 onDraw 中存储 Canvas 指针,并在运行长代码时在其中绘制一些东西,但视图仅在代码完成执行后才会刷新。执行代码时有什么方法可以强制重绘视图?

向用户显示消息/进度的另一种方法是在上方打开一个单独的 Activity,该 Activity 不会全屏显示,因此您仍然可以看到应用程序的后面部分,就像您长按 Home 按钮和最近的应用程序弹出窗口出现。我该如何做到这一点以及如何在两个活动之间进行通信?

提前致谢!

【问题讨论】:

  • “我不会重做所有代码来尝试在单独的线程中移动代码的所有不同部分” - 那么你将不会显示任何进展。被阻止的 UI 是被阻止的 UI。 Android 比你更固执:要么使用 Thread/Handler/AsyncTask,要么放弃。您也不会处理来自其他活动的任何消息,因为它们是在 UI 线程上传递的。
  • 如果您有一个特定的想法,请尝试它并返回特定的问题。例如,您不想做的重构可能比您预期的要简单(您真的认真研究过它是如何完成的吗?)

标签: android progress redraw


【解决方案1】:

抱歉,您不能这样做。

主线程仅用于操作 UI,不用于长时间操作... progress 也将冻结,因为它是 UI 线程的一部分。查看 Google 指南,如果您真的想这样做,请查看 ProgressDialog

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    相关资源
    最近更新 更多