计时器无法正常工作 android

Timer not working properly android

我有一个调用函数 beginMemoryQuest(View v) 的按钮。我期待 0-5 的数字计数,每个数字相差 1 秒。意思是,Handler mHandler 应该从 0-5 接收 index。但是,看起来 LogCat 正在打印它正在接收所有 index=6 调用。我该如何解决? 我希望 Handler 接收来自 0-6 的呼叫,每个呼叫的周期为一秒。

感谢任何帮助,非常感谢!

private static int index;
public void beginMemoryQuest(View v){
    Timer t=new Timer();

    for(index=0;index<6;index++){
        t.schedule(new TimerTask() {
            @Override
            public void run() {
                Bundle b=new Bundle();
                b.putInt("index", index);
                Message msg=new Message();
                msg.setData(b);
                mHandler.sendMessage(msg);
            }
        }, 1000*index+1);
    }
}
public Handler mHandler=new Handler(){
    public void handleMessage(Message msg){
        int ind=msg.getData().getInt("index", -1);
        Log.e("###","handling "+ind);
    }
};

PS:Handler 有一个警告:This Handler class should be static or leaks might occur

第一个问题是您正在创建 6 个计时器任务,而不是仅仅重复相同的任务 6 次。其次,定时器任务在延迟后 运行 ,到那时你已经创建了所有 6 个定时器任务并且甚至在任务开始之前将索引值增加到 6。

尝试这样的事情:

private int index = 0;
public void beginMemoryQuest(View v){
    final Timer t = new Timer();

    t.schedule(new TimerTask() {
        @Override
        public void run() {
            Bundle b=new Bundle();
            b.putInt("index", index);
            Message msg=new Message();
            msg.setData(b);
            mHandler.sendMessage(msg);
            index++;
            if (index>=6) {
                t.cancel();
            }
        }
    }, 1000, 1000);
}

更新: 我在 schedule 方法中添加了第三个参数,它让计时器知道在指定延迟后再次安排它,直到我们取消计时器。