2016-09-21 55 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