1

Android 代码如何检测处理程序的可运行进程何时完成?在这个特定的应用程序中,除了处理程序完成其工作之外,不会生成其他事件。

简单地while()围绕全局布尔标志的连续测试循环似乎不起作用:

... stuff to do before the handler's runnable is started
while (globalBooleanFlagStatingThatRunnableIsNotYetFinished)
                     Thread.sleep(5);
... stuff to do only after the handler's runnable is finished, like process data

使用该while()方法,执行似乎在分号处永远暂停,直到操作系统推动强制关闭,而不管可运行对象是否成功设置所述布尔标志。

其他人如何检测到可运行进程的完成?

4

2 回答 2

0

您正忙于等待,或者实际上完全等待的事实表明您的应用程序的设计理念可能存在缺陷。通常,如果您正在等待某事,您应该做的是触发一个动作作为对某个处理程序的响应。例如,在这种情况下,您可能只是能够处理一个onClick事件。如果你在一个线程中等待这个,为什么?相反,杀死线程,留下一些状态(通过状态机,实现延续),当 onClick 被调用时,启动一个新任务来执行其余的工作。

基本上,我不确定我是否认为您实际上需要在这里等待,而是您应该使用处理程序。

编辑:您正在寻找的那种编程在应用程序的主线程上是不可能的。相反,您应该做的是使用AsyncTask,您在其中完成任务中的工作(即,定期打开和关闭闪光灯)或产生线程的服务。无论如何,您应该阅读 Android 线程,您的问题可能与您尝试使用主线程进行长时间运行的操作有关。是的,这是可能的,但我不会称之为“实时编程”,这只是一个简单的线程问题。

于 2012-06-09T19:42:31.007 回答
0

您的 while 循环占用了所有 cpu 时间,因此没有其他东西(例如 UI 消息)有时间处理。

Sleep()通常的解决方法是在循环内放一个短路。这导致对内核的调用允许它在一段时间内运行其他任务位。

其他I/O(例如控制台打印文件读/写)也执行此操作。

于 2012-06-09T15:18:43.713 回答