Java android应用程序在计时器循环时崩溃
我是新来的,诺布也是。我通过制作第一个简单的应用程序开始学习Java和Android 我想每1秒做一次时间循环来完成一些功能。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
我有这个:
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的版本并下载了更多工具,现在一切正常。是时候阅读更多关于线程和通信的信息了