安卓什么时候会自动挂起一个线程?

3
在开发我的Android应用时,我遇到了以下问题:
一个处理程序线程被Android自动挂起。在“DDMS”透视图中,Eclipse显示线程的状态为“挂起”。该线程的处理程序不再处理发送给它的消息(我设置了断点,程序从未执行到那里)。同时,应用程序正常运行,除了UI模块无法显示任何内容,因为没有数据。(这个线程用于从本地数据库和网络加载数据。)
我的问题是:在什么情况下,Android虚拟机会暂停一个线程?
1个回答

3
据我所知,并不存在挂起一个线程的情况。线程有几种状态:
  • 新建(还未开始执行)
  • 运行中
  • 等待/阻塞(等待被执行,可能是在 synchronized block 或者 Object.wait() 被调用之前被阻塞,或者在 Thread.sleep() 期间被阻塞)
  • 已死亡
当进程被杀死时,您的线程会被挂起(例如由于未捕获的异常或进程强制关闭)。此外,当没有更多的线程运行时,进程也会关闭。Android 操作系统也可能选择结束进程以释放资源给用户可见的进程。
请查看此链接
另外,Thread.suspend() 已经被弃用,请不要使用它。

谢谢。我已经编辑了我的问题,使其更加详细。线程的处理程序不再处理发送给它的消息。Android DDMS显示其状态为“挂起”。Android DDMS使用“挂起”一词来表示某种状态,肯定有原因。 - Guocheng
据我所知,处理程序与UI线程有某种联系,因此如果您在处理程序上发布了一些内容,并且Activity/UI变得不可见或被销毁,则该消息可能永远不会运行。如果您正在使用某种定时发送消息的方式,则应考虑使用单个线程,因为应用程序不会立即关闭它。您可以使用Thread.sleep()Object.wait()来计时。如果在线程中要执行与UI相关的操作,则可以转向您的处理程序并将其发布在其中。 - Sipka
你的意思是非 UI 线程的 handler 与 UI 线程有某种连接吗?在我的情况下,Activity/UI 仍然处于前台。 - Guocheng

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接