본문 바로가기

BLE/안드로이드 앱

[Noise Detector] 그래픽 모듈 (6) : Warning

Warning은 WaveBars.WarningListener 인터페이스를 구현하며, 이 인터페이스는 단 하나의 startWarning() 메소드만 갖습니다. 그리고 WaveBars에서 수신된 데이터의 최대값이 mCLValue보다 크면 Warning의 startWarning() 메소드를 호출하게 됩니다.

 

startWarning() 메소드는 일정 시간마다 메인 스래드의 메세지 큐에 Runnable 객체만 전송하는 타이머 역할을 하는 스래드입니다. 이 Runnble 객체는 boolean타입의 mReqLight 필드만 true/false로 변환시켜가며 invalidate() 메소드를 호출하는 것이 전부인데, invalidate()로 인하여 호출되는 onDraw()에서 mReqLight 필드가 true이면 화면을 경고색으로, false이면 화면을 투명색으로 전환시킵니다. 이로 인해 사용자는 깜빡이는 화면을 보게 됩니다.

 

WaveDataView의 getView() 메소드에 입력된 twinkNum의 1은 일반화면에서 경고화면으로, 다시 경고화면에서 일반화면으로 전환되는 횟수을 의미하며, warnTime(ms) 동안 twinkNum회 전환이 발생합니다.

 

위 동작들은 Warning의 mIsProgressing 필드에 의해 synchronized됩니다. 즉, Warning은 단 하나의 Runnable 객체만 메인 스래드의 메세지 큐에 보낼 수 있습니다.