2016-09-21 76 views
2

我是新来的,还有noob。通过制作我的第一个简单的应用程序,我开始学习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

由于Log.d之前崩溃就行了,你不会看到它,究竟是什么抛出异常,检查DDMS日志 – sam

+0

显示你的logcat语句..,应该是stageArray –

+0

问题好吧,我更新了Android Studio版本,下载了更多的工具并且工作正常。也许在构建新项目时出现错误 – baribari

回答

1

您的应用程序崩溃,因为你访问从UI线程,当你调用imV.setImageResource外Android的UI工具包(stageArray.getResourceId(步骤-1));。因此,发生了异常。您必须在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(); 
+0

它的工作原理,谢谢。我更新了Android Studio的版本并下载了更多工具,现在没问题。有时间阅读有关线索和沟通的更多信息 – baribari