在我的应用程序中,我得到了一些活动和ReceiverThread.class
。
Thread
是从两个不同的活动开始的。每次我切换到另一个Activity
并回忆以前的活动Activity
时,它都会启动一个新的Thread
。所以如果我在我的应用程序上做了一些大约10分钟的测试,或者应用程序只是使用了一段时间,就会有大量的线程打开,并且都做同样的事情。大多数情况下,线程都在TimedWait
上。
这给了我错误的数据,导致应用程序严重滞后,有时甚至没有响应。
是否有一个很好的可能性停止线程onPause()
或onStop()
?因为许多方法都被弃用了。或者如何恢复以前启动的线程,从而防止Activity
创建一个新的线程?
我的ReceiverThread.run()
:
public void run() {
initiateCAN();
while (true) {
try {
Thread.sleep(60);
mHandler.post(r);
} catch (InterruptedException e) {
break;
}
}
}
如果有什么不清楚或遗漏的,请随时问我,我会编辑我的帖子,但不要只是简单地否决。
建议使用内置的中断系统。然后,您可以通过调用Thread.interrupt()
来停止线程(如果不想要多个实例,最好使用onPause()
)。您的run方法需要稍微改变一下:
public void run() {
initiateCAN();
try {
while (!isInterrupted()) {
Thread.sleep(60);
mHandler.post(r);
}
} catch (InterruptedException e) {
}
}
虽然这可能有效,但最好使用Service
或其他方法来确保一次只有一个实例(可能是片段而不是活动?)。
你可以使用Android服务,该服务启动线程。当您切换活动时,服务正在运行,不需要启动一个新线程。