Android Runnable Handler不会按指定的时间间隔(秒)停止

时间:2015-06-16 23:36:44

标签: java android runnable android-handler

我正在使用Runnable Handler以指定的时间间隔更新我的UI。但是在按钮点击事件中,我的这个计时器会停止,但是按照指定的时间间隔,它会继这是我的代码。

public class MainActivity extends ActionBarActivity {
public TextView myCounter;
private int mInterval=50;
private Handler mHandler;
int i=1;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mHandler = new Handler();
    myCounter = (TextView) findViewById(R.id.myCounter);
}
Runnable mStatusChecker=new Runnable() {
    @Override
    public void run() {

        updateCounter();
        mHandler.postDelayed(mStatusChecker,mInterval);
    }
};

void updateCounter(){
    myCounter.setText(""+i++);
    if(i==36)
    {
        stopRepeatingTask();
    }
    if(i==66)
    {
        stopRepeatingTask();
    }
    if(i==96)
    {
        stopRepeatingTask();
    }

}
void startRepeatingTask()
{
    mStatusChecker.run();
}

void stopRepeatingTask()
{
    mHandler.removeCallbacks(mStatusChecker);
}
public void StopClick(View view)
{
    stopRepeatingTask();
}

public void StartClick(View view)
{
startRepeatingTask();
}
}

UpdateCounter函数继续运行,即使是i == 36或66或96的值。但是当我单击StopClick按钮单击事件时它停止。 需要帮助。

1 个答案:

答案 0 :(得分:2)

据我所知,你停止了这项任务。此停止在updateCounter()中完成,但之后您将使用mHandler.postDelayed(mStatusChecker,mInterval);

再次启动处理程序

你可以在停止计数器时设置一个布尔值

void stopRepeatingTask()
{
    isCancelled = true;
    mHandler.removeCallbacks(mStatusChecker);
}

以便您可以签入Runnable

if (!isCancelled) {
    mHandler.postDelayed(mStatusChecker,mInterval);
}