안드로이드 프로그래밍, Notification 알림 설계 (AchroHD)

안드로이드 프로그래밍, Notification 알림 설계 (AchroHD)


대학원 다닐 때 썼던 논문 일부를 발췌하여 소개합니다.


안드로이드 프로그래밍

Notification System 설계

xxx은 24시간 작동하는 측정 장비로서 시스템의 안정성을 높이기 위하여 일정한 간격으로 시스템을 리부팅 하도록 설정되어 있고 또한, 일정한 간격(알림이 필요한 이유)으로 감지 도선의 이상 상태 여부도 파악한다.


측정 시 정상적인 상태인 경우 측정한 데이터 모두를 하드 디스크에 저장하지만, 이상 상태가 감지될 시엔 측정한 데이터 파일을 모니터링 서비스를 운영하는 서버로 전송하고, CDMA 모듈로 담당자에게 문자 메시지를 전송한다. (Notification 사용법)


본 논문에서는 문자 메시지를 모니터링 서버 담당자에게로 단 한 번 전송하며, 전송받은 정보를 토대로 담당자가 인위적으로 이상 여부에 대한 정보를 담아놓는 XML 파일을 수정한다는 가정을 하여 애플리케이션을 구현하였다. (안드로이드 프로그래밍했다는 뜻)

안드로이드 알림(Notification)은 OS가 탑재된 스마트폰이나 테스트 기기의 백그라운드에서 실행되는 특징을 갖는다. 제안한 애플리케이션은 인터넷을 사용하여 웹에 접근하기 때문에 메인 UI에서 실행될 경우 해당 스레드가 매우 느려진다.


더군다나 주기적으로 웹에 접근하여 파일을 분석한 뒤, 미리 구축된 DB의 데이터와 비교를 하므로 자칫 스마트폰이나 테스트 기기에서 스택 Overflow가 발생할 여지도 충분하다.


이에 따라, 전체적인 시스템 저하를 막기 위해서는 리소스 소모량이 많아 작업 시간이 오래 걸리는 애플리케이션은 백그라운드 스레드로 옮겨 수행해야 한다.


(그림 1)은 제안한 애플리케이션의 실행 과정을 나타낸다.


안드로이드 알람 시스템 순회 과정[안드로이드 프로그래밍] 알람 시스템 순회 과정


메인 UI에서 다루는 작업은 적당한 속도를 유지하기 위하여 자식 스레드의 작업을 강제로 종료하거나 멈추게 한다.


반면 자식 스레드는 메인 스레드에 많은 것을 양보하면서 시스템에 부하가 걸리지 않게 남은 리소스 자원을 이용하여 수행된다. DB 구축을 위해서 사용자가 지정한 일정 시간마다 웹을 통하여 XML 파일에 접근한다.


동작 과정이 복잡한 XML 파싱 기술 대신, 간단한 Tag 조회 및 분석을 통하여 이미 DB에 저장하여 파악된 정보와 비교한다. 비교 기준은 날짜 - 시간 - 위치 순으로서, 만약 DB가 보유하지 않은 새로운 정보가 조회된다면, DB에 해당 사항이 추가된 뒤 알림(Notification)이 발생한다.


DB에 구축된 데이터들은 안드로이드 파일 시스템에 저장이 되며, 저장되는 데이터의 일부인 위도/경도 값을 토대로 구글맵의 마커(Marker) 생성 위치가 결정된다. 마커는 터치가 이뤄졌을 시에 Toast로 마커 정보가 화면에 그려진다.


제안한 애플리케이션이 최초로 실행되면 XML 파일을 제공하는 웹으로 접근하여 DB를 생성한 뒤, Tag 별로 분리된 각각의 데이터들을 순차적으로 저장한다. 이때 XML 파일에서 추출하는 정보는 아래와 같다.

안드로이드 프로그래밍 핵심


1. xxx이 설치된 위치를 나타내는 Name,

2. Xml 파일에 반영되어 실제 이상이 발생한 날짜를 확인할 수 있는 Date,

3. 이상 상황에 대한 정보를 담는 Description,

4. 구글맵에서 해당 위치에 마커를 표시할 위치 정보인 Latitude/Longitude


이와 같은 Tag는 현재 시공 업체가 구글어스를 통하여 제공하는 KML 파일을 기준으로 작성되었다. 이렇게 추출된 데이터들이 정상적으로 DB에 저장이 된다면, 시각적으로 이 데이터를 표현하는 단계로 넘어간다.


ArrayAdapter를 이용하여 ListView에 이 데이터들을 정렬하여 표시하는 것과 구글맵을 활용하여 DB에 저장된 좌표와 관련 내용을 그려주는 것이다.


이런 시각화 작업은 미리 사용자가 지정한 알림 시간 간격으로 자동 갱신이 된다. 만약 갱신되었음에도 사용자가 인지하지 못하는 상황이 발생할 수 있으므로, 애플리케이션을 제작하는 단계에서, 소스 코드에 안드로이드 권한(Permission)을 설정하여 하드웨어적인 수단을 이용하였다.


제안한 애플리케이션은 한 번의 갱신이 일어날 때, 스마트폰에서 진동과 음악이 발생하도록 구현되었다. (Notification 발생을 의미) 안드로이드 권한은 Eclipse에서 소스 코드 작성을 위하여 프로젝트를 생성할 때, 자동 생성되는 Manifest.xml에 정의한다.


진동 발생은 VIBRATE, 음악은 SYSTEM_ALERT_WINDOWS로서 이 두 권한을 선언하여 코드를 구성하면 사용자는 갱신 발생 시마다 진동과 특정 음악을 듣게 된다. 이처럼 매우 능동적으로 애플리케이션을 이용할 수 있다.


아래의 다음의 (그림 2)는 생성된 DB를 토대로 이상 상황에 대하여 표현한 ListView 화면이다.


DB를 기초로 생성한 리스트[안드로이드 프로그래밍] DB를 기초로 생성한 리스트


(그림 3)은 Menu에서 전환한 구글맵이다.


역시 DB에 저장된 데이터를 토대로 하여 세부 사항을 보유한 마커가 생성되며 그 정보는 Toast로 표현되는 것을 보인다. 


DB를 기초로 수정된 구글맵[안드로이드 프로그래밍] DB를 기초로 수정된 구글맵


Toast는 잠시 보였다가 페이드아웃이 되는 일시적인 다이얼로그 박스로 작업 리스트의 포커스를 빼앗지 않으며, 활성 애플리케이션도 방해하지 않는 특징을 갖고 있다.



ps. 상대적으로 젊은 검수 위원님들 때문에 고생했던 게 생각나네요. 30대의 혈기 왕성한 교수님들이 검토했던 논문인데, 그분들에게 감사합니다. 당시엔 왜 이리 까다로운가 원망했지만, 지금 와서 생각해보니 되게 감사하네요.


안드로이드 프로그래밍, Notification 알림 설계 (AchroHD)

댓글(0)

Designed by JB FACTORY