2016-09-21 5 views
2

저는 여기와 멍청한 놈도 새로 생겼습니다. 내 첫 번째 간단한 앱을 만들어 자바와 안드로이드를 배우기 시작했다.타이머 루프 중에 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를 볼 수 없습니까?
간단한 변경을 위해 시간 루프를 수행하는 더 좋은 방법이 있습니까?

앱이 추락
+0

당신이 그것을 볼 수 없습니다 CountDownTimer 과 : 당신은 UI 스레드에서 이미지 뷰에 대한 이미지를 설정해야합니다 던져 예외가 DDMS 로그 – sam

+0

logcat 문을 보여줍니다 .. 확인, stageArray 문제가 있어야합니다 –

+0

좋아, 내가 안드로이드 스튜디오 버전을 업데이 트하고 더 많은 도구를 다운로드하고 작동합니다. 어쩌면 새로운 프로젝트를 구축하는 동안 오류가 있었을 수도 있습니다. – baribari

답변

1

때문에 당신 액세스 UI 스레드 당신이 imV.setImageResource 전화 외부에서 안드로이드 UI 툴킷 (stageArray.getResourceId (단계, -1));. 그래서 예외가 발생했습니다. 무슨 일이 정확히,

runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
        imV.setImageResource(stageArray.getResourceId(step, -1)); 
       } 
      }); 

또는 간단한 해결책이 Log.d 전에 라인에 충돌하기 때문에

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

관련 문제