定时器循环

时间:2016-09-21 14:54:34

标签: java android loops

我是新手,也是新手。我开始通过制作我的第一个简单的应用程序来学习Java和Android。

我想做时间循环每1秒做一些功能。
我有这个:

new Timer().scheduleAtFixedRate(new TimerTask(){
    @Override
    public void run(){
        imV.setImageResource(stageArray.getResourceId(step, -1));
        Log.d("MyApp","I am here");
        step ++;
    }
},0,1000);

它在我的init()功能中 在我的设备上运行此应用程序后,应用程序崩溃 当我删除它运行的imV.setImageRes...行时,但我没有收到日志通知 步数值正在变化 当我使用Handler时,会发生类似的事情。

为什么我的应用程序崩溃? 为什么我不能从这个循环中看到任何log.d? 是否有更好的方法来进行时间循环以进行简单的更改?

1 个答案:

答案 0 :(得分:1)

当您调用 imV.setImageResource(stageArray.getResourceId(step,-1))时,您的应用已崩溃,因为您从UI线程外部访问Android UI工具包; 。因此,异常已经发生。您必须在UI线程中为imageview设置图像:

runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    imV.setImageResource(stageArray.getResourceId(step, -1));
                }
            });

使用 CountDownTimer

的简单解决方案
new CountDownTimer(totalStep * 1000, 1000) {
        @Override
        public void onTick(long millisUntilFinished) {
            step = millisUntilFinished/1000;
            imV.setImageResource(_yourResID);
        }

        @Override
        public void onFinish() {
            Log.d("Finish", "Done");
        }
    }.start();