我是新手,也是新手。我开始通过制作我的第一个简单的应用程序来学习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? 是否有更好的方法来进行时间循环以进行简单的更改?
答案 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();