早在 2011 年,我就在这个论坛的一篇帖子中发现了粘贴在下面的代码。我使用计时器来触发 doSomeWork 的执行,但 doSomeWork 会产生一个异步任务,并且(我发现)异步任务只能从 UI 线程中产生。所以,我转而使用 Handler 的 postDelayed 函数。
现在这段代码确实每十秒调用一次 doSomeWork 并且我的 asynctask 不再有问题。但是当我调用 stopRepeatingTask() 时,它不会停止 doSomeWork 的执行——它每十秒就会被调用一次。
此代码在服务中,并且 stopSelf() 已被调用,但代码仍在运行。Android 系统甚至没有显示该服务正在运行,但它仍在调用 doSomeWork。
怎么了?我怎样才能阻止它?谢谢,加里
private int m_interval = 5000; // 5 seconds by default, can be changed later
private Handler m_handler;
@Override
protected void onCreate(Bundle bundle) {
// ...
m_handler = new Handler();
}
Runnable m_statusChecker = new Runnable() {
@Override
public void run() {
doSomeWork(); //this function can change value of m_interval.
m_handler.postDelayed(m_statusChecker, m_interval);
}
};
void startRepeatingTask() {
m_statusChecker.run();
}
void stopRepeatingTask() {
m_handler.removeCallbacks(m_statusChecker); // <--this does not appear to work
}