我从一个方法调用:
myHandler.postDelayed(mMyRunnableHide, 6000);
Run Code Online (Sandbox Code Playgroud)
哪个叫:
public Runnable mMyRunnableHide = new Runnable()
{
public void run()
{
mTextDisplay.setText("");
DisplayX();
}
};
Run Code Online (Sandbox Code Playgroud)
如果点击屏幕上的按钮,我想停止runnable:
Button next = (Button) findViewById(R.id.Breaction);
next.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
myHandler.removeCallbacks(mMyRunnableHide);
mTextDisplay.setText("");
DisplayX();
}
});
}
Run Code Online (Sandbox Code Playgroud)
removecallbacks不会停止runnable.我究竟做错了什么?我使用的方法是否正确?我只是希望当用户单击按钮时runnable为"Not Run".
谢谢你的帮助.
我在2011年在该论坛上的帖子中发现了以下粘贴的代码。我使用计时器触发doSomeWork的执行,但doSomeWork产生了一个asynctask,并且(如我所知)asynctasks只能从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
}
Run Code Online (Sandbox Code Playgroud)