Java android应用程序在计时器循环时崩溃

Java android应用程序在计时器循环时崩溃,java,android,loops,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

我是新来的,诺布也是。我通过制作第一个简单的应用程序开始学习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…
行时,它会运行,但不会收到日志通知。
步长值正在更改。
当我使用处理器时,也会发生类似的事情

为什么我的应用程序会崩溃?
为什么在此循环中看不到任何log.d?

是否有更好的方法进行时间循环以进行简单更改?

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

runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    imV.setImageResource(stageArray.getResourceId(step, -1));
                }
            });
或使用倒数计时器的简单解决方案

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();

由于它在Log.d之前崩溃,您将看不到它,抛出的异常是什么,请检查DDMS logsshow您的logcat语句..,stageArrayok应该有问题,我更新了Android Studio版本,下载了更多工具,它正常工作。也许在构建新项目时出现了错误,谢谢。我更新了Android Studio的版本并下载了更多工具,现在一切正常。是时候阅读更多关于线程和通信的信息了