我正在使用DDMS来监控我的应用程序中的线程,我看到我的应用程序有一堆本机线程,如下图所示。有时,当用户与我的应用程序交互时,本机线程的数量会增加,这会导致我的应用程序有时无法满足我的预期。反正有杀死这些原生线程吗?
答案 0 :(得分:2)
没有"原生线程"在Android上,虽然有些人可能会使用它来引用未附加到VM的线程(这也会使它们对DDMS不可见)。线程碰巧在执行线程转储时在本机代码中执行(或等待),但可能花费大部分时间执行字节码。 (Dalvik线程状态列表可用here。)
线程的名称表明它们是在没有明确名称的情况下创建的。具有名称NsdManager的一个线程可能存在,因为您正在使用NsdManager,其对来自应用程序的请求的响应是在单独线程上的侦听器回调上。 [原文如此]。
您可以从堆栈跟踪中收集一些有用的信息。在DDMS中,双击该线程以获得回溯。在root设备上,您可以kill -3 <pid>
获得完整转储,包括本机堆栈帧。
不允许杀死任意线程,因为它们可能持有锁或其他资源。如果您可以确定启动它们的是什么,并且它们是不必要的,则可以防止它们首先启动。