2013-02-22 2 views
3

내 안드로이드 응용 프로그램 개발 연구의 일환으로 LED 플래시 라이트에 액세스하여 간단한 SOS 응용 프로그램을 개발했습니다. 모든 것이 잘 작동하고 1/2 초 간격으로 LED가 깜박입니다. 그러나 사용자가 전화에서 뒤로 버튼을 누르면 응용 프로그램이 종료되고 1/2 초 후에 "충돌/강제 종료"메시지가 나타납니다. 나는 안드로이드 개발에 대한 멍청한 행동이며 내 코드에 무슨 문제가 있나? u는 당신의 타이머를 취소하지 않았기 때문에Android 응용 프로그램 "뒤로 버튼"을 눌러 종료합니다.

private boolean lOn=true; 



    Timer mTimer = new Timer(); 
    TimerTask mTimerTask = new TimerTask() { 
     @Override 
     public void run() { 

      if(lOn){ 
       final Parameters p = camera.getParameters(); 
       Log.i("info", "torch is turn Off!"); 
       p.setFlashMode(Parameters.FLASH_MODE_TORCH); 
       camera.setParameters(p); 
       camera.startPreview(); 
       lOn=false; 
      } 
      else { 
       final Parameters p = camera.getParameters(); 
       p.setFlashMode(Parameters.FLASH_MODE_OFF); 
       camera.setParameters(p); 
       camera.stopPreview(); 
       isLighOn = false; 
       lOn=true; 
      } 


     } 
    }; 
+2

stacktrace !!!!!! – smk

+1

나중에 참조 할 수 있도록, 명령 행에서'adb logcat'을 실행하거나 Eclipse에서 Debug 퍼스펙티브를 사용하여 찾을 수있는 stacktrace를 게시하십시오. –

답변

4

cancel();를 호출 한 후이

@Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) 
    { 
     if(event.getAction() == KeyEvent.ACTION_DOWN) 
     { 
      if(keyCode == KeyEvent.KEYCODE_BACK) 
      { 
       mTimer.cancel(); 
      } 
     } 
     return super.onKeyDown(keyCode, event); 
    } 
+0

고마워 .. 해결 된 :) ... 고마워. – ramesh

+2

@ramesh : u r welcome :) – Deepzz

2

전화 purge(); 방법을 시도 ... 수 있음. 왜? cancel 메소드를 호출하면 타이머가 작동을 멈 춥니 다. 그러나 그것은 끝나지 않았습니다. 응용 프로그램이 닫히기 전에 수동으로 닫아야합니다 (db.close(); : sqlite). 이 시도. 나는 이것이 타이머에만 있다고 생각한다. 나는 TimerTask에 대해서 모른다.

mTimer.cancel(); 
mTimer.purge(); 
관련 문제