2013-11-28 30 views
2

当开发我的android应用程序时,遇到以下问题:Android会在什么时候自动挂起一个线程?

处理程序线程被android自动挂起。 Eclipse在“DDMS”透视图中将线程的状态显示为“挂起”。线程的处理程序不再处理发送给它的消息(我设置了一个断点,程序从不去那里)。与此同时,应用程序正常运行,除了由于没有数据,UI模块无法显示任何内容。 (此线程用于从本地数据库和网络加载数据。)

我的问题是:在什么样的情况下android虚拟机会挂起一个线程?

回答

3

据我所知,没有这样的挂起线程。有螺纹的一些州:

  • 新(还没有开始呢)
  • 运行
  • 等待/阻塞(等待运行时,将被阻止之前synchronized blockObject.wait()叫,或Thread.sleep()

你的线程被挂起,当你的进程被杀死。(例如,通过一个未捕获的异常,或进程强制关闭) 还有一个进程关闭,当没有更多的线程运行。 Android操作系统可能会选择杀死一个进程,以释放资源给用户的可见进程。

检查this链接。

Btw Thread.suspend()已弃用。不要使用它。

+0

谢谢。我编辑了我的问题,使其更加详细。线程的处理程序没有处理发送给它的消息。 Android DDMS显示其状态为“挂起”。 Android DDMS使用“suspend”这个词来表示一种状态的原因一定是有原因的。 – Guocheng

+0

就我所知,处理程序与UI线程有某种联系,因此,如果您在处理程序上发布了某些内容,并且活动/用户界面不可见或被销毁,则该信息可能永远不会运行。如果您使用某种时间发送消息,那么您应该考虑使用单个线程,因为应用程序不会关闭它。你可以用'Thread.sleep()'或'Object.wait()'来计时。如果你想在线程中做一些与用户界面相关的事情,那么你可以转向你处理程序并将其发布。 – Sipka

+0

你的意思是一个非UI线程的处理程序以某种方式与UI线程连接?在我的情况下,活动/用户界面仍然在前面。 – Guocheng