如何防止我的线程回收?
======编辑=======
“系统会在它结束之前自动清理线程” - 意味着该线程在不应该被杀死时被杀死
答案 0 :(得分:1)
您是否在循环中调用Thread.yield()以允许系统执行其他操作?如果没有 - 那么android可能会因为消耗100%的CPU占用而杀死线程 - 如果它是一个简单的循环,堆栈跟踪将不会改变,所以它会使你的脚本挂起
http://developer.android.com/reference/java/lang/Thread.html#yield()
Yield()告诉线程执行器它应该在返回你的线程之前停止并运行其他线程,没有它你的循环将窃取其他应用程序的资源
如果您确定您的旗帜在一段时间内不会改变,您也可以睡觉
编辑 - 背景 - 它是android检测挂起线程的方式 - 如果线程占用了100%的CPU,那么它会将堆栈跟踪转储到文件中,等待很短的时间然后转储另一个堆栈跟踪 - 如果两者匹配,则假定代码已停止运行,并且将为活动发出ANR“xx不响应”对话框,或者,如果它是服务,它将简单地将其终止并自动重新启动它。
通过屈服你可以防止它消耗100%所以它永远不会尝试这样做。
答案 1 :(得分:0)
目前还不清楚你的代码在做什么,甚至你认为应该发生什么。但是有一件事我们可以马上解决。
Java(和Android)中的线程不会“回收”。一旦Thread的run()
方法结束(通过返回,或允许某些异常传播),它将不会重新启动。永远不会。
此外,线程在运行时不会进行垃圾回收。垃圾收集不能导致线程结束。