Exception Study

Error : Can't create handler inside thread Thread[....] that has not called Looper.paepare( ) (feat. Android)

85chong 2020. 1. 9. 19:18
728x90
반응형
SMALL

함수에 딜레이를 줄때 사용하는 방법 구글중에 엄청나게 많은 자료들이 존재함

그중에 한가지 방법을 소개하면(하지 말아야할 코드)

private void Delay(){ 
	new Handler().postDelayed(new Runnable(){ 
	@Override 
		public void run(){ 
		// A 구간 
		// 1500 -> 15초  
		// 최초 Delay() 호출 15호 후에 호출될 곳  
		} 
	},1500); 
} 


위와같이 해도 동작은 잘됨
근데 위의 코드는 간헐적으로 작동이 됨(이유는 모르겠음)

실사례를 말하면

앱을 최초 설시후 Delay 호출 안됨 -> 앱을 완전 종료후 재 실행 -> Delay 호출됨
아이러니하지만 실제로 이렇게 작동되었다. try{ catch 로 묶어놨기에 앱이 죽지 않아 불행중 다행이라 생각함

catch Exception 된 메세지를 보니
"Can't create handler inside thread Thread[어쩌구저쩌구] that has not called Looper.paepare( )"
위와같은 메시지를 확인할수있었음 -> 찾아본 결과 스레드 안에서 핸들러 제대로 만들어서 써라 라는것으로 판단
아래와 같이 변경하여 수정함 (실제 문제없이 작동되는것 확인함)


private void Delay(){ 
	Handler handler = new Handler(Looper.getMainLooper());
	handler.postDelayed(new Runnable(){ 
	@Override 
		public void run(){ 
		// A 구간 
		// 1500 -> 15초  
		// 최초 Delay() 호출 15호 후에 호출될 곳  
		} 
	},1500); 
} 



위와 같이 사용하면 Exception 은 발생하지 않게 된다. 적어도 내 환경에서는 확인 되었음

-끝-