【发布时间】:2012-11-06 23:18:04
【问题描述】:
我已经看到这个问题被问了很多次,但没有办法做到这一点。我在主 UI 线程中有更多不同的代码部分(有时需要超过 10 秒),并希望向用户显示一些进度。我不会重做所有代码来尝试在单独的线程中移动所有不同部分的代码(已经是一个非常复杂的应用程序),同时也会冻结需要在继续之前执行代码的主线程,所以不要建议使用 Thread/Handler/AsyncTask因为他们不会这样做。
我尝试过的一件事是从我正在使用的自定义视图的 onDraw 中存储 Canvas 指针,并在运行长代码时在其中绘制一些东西,但视图仅在代码完成执行后才会刷新。执行代码时有什么方法可以强制重绘视图?
向用户显示消息/进度的另一种方法是在上方打开一个单独的 Activity,该 Activity 不会全屏显示,因此您仍然可以看到应用程序的后面部分,就像您长按 Home 按钮和最近的应用程序弹出窗口出现。我该如何做到这一点以及如何在两个活动之间进行通信?
提前致谢!
【问题讨论】:
-
“我不会重做所有代码来尝试在单独的线程中移动代码的所有不同部分” - 那么你将不会显示任何进展。被阻止的 UI 是被阻止的 UI。 Android 比你更固执:要么使用 Thread/Handler/AsyncTask,要么放弃。您也不会处理来自其他活动的任何消息,因为它们是在 UI 线程上传递的。
-
如果您有一个特定的想法,请尝试它并返回特定的问题。例如,您不想做的重构可能比您预期的要简单(您真的认真研究过它是如何完成的吗?)