2012-06-08 135 views
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()做法,似乎在执行分号永远暂停,直到强制关闭被操作系统推送,不管可运行的成功设置所述布尔标志。

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

+0

哦,请不要忙 - 等待;我的手机实际上可能会融化使用某种事件/通知/回调/任何事情。 –

回答

0

你的while循环占用了所有的CPU时间,所以没有其他任何东西,比如UI消息,有时间处理。

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

其他I/O如控制台打印文件读/写也做到这一点。

0

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

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

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

+0

谢谢@Kristopher - 看到我的更新 – androidAnnie

+0

@androidAnnie我同样更新了答案。 –

相关问题