[Android] Wi-Fi 서비스에서 JAVA Hashmap 사용 예.
1. JAVA Hashmap 개요.
Hashmap은 Key-Value 컨셉인 Map 인터페이스에 기반한 자료구조로 특정 키(Key)로 저장된 값(Value)을 빠르게 찾을 수 있다.
Hashmap은 저장된 순서는 보장하지 않지만 데이터의 저장하고(put) 읽어오는(get) 기능은 일정 시간 내에 결과를 얻을 수 있다.
Hashmap의 사용법은 오라클 공식 자바 사이트나 검색으로 충분히 찾을 수 있다.
이 글은 안드로이드 키캣 버전에서 Wi-Fi 서비스에서 hashmap을 사용하는 예를 설명한다.
2. Android] Wi-Fi 서비스에서 Hashmap 사용 예.
WifiMonitorSingleton 클래스에서 HashMap 정의
안드로이드는 WifiService와 WifiP2pServcie의 서비스를 지원한다.
WifiService는 wlan0, WifiP2pServcie는 p2p0 인터페이스를 WifiMonitor에 등록하여 모니터링한다.
여기서 WifiMonitor는 Singleton 패턴을 사용하므로 WifiMonitorSingleton란 서브클래스는 하나만 생성된다.
이 서브클래스에서 인터페이스 키에 해당하는 WifiMonitor 값을 관리한다.
WifiMonitor.java 파일 내에 아래와 같은 코드로 정의되어 있다.
private static class WifiMonitorSingleton {
...
private HashMap<String, WifiMonitor> mIfaceMap = new HashMap<String, WifiMonitor>();
...
}
WifiMonitor.java 파일 내에 아래와 같은 코드로 정의되어 있다.
private static class WifiMonitorSingleton {
...
public synchronized void registerInterfaceMonitor(String iface, WifiMonitor m) {
mIfaceMap.put(iface, m);
}
...
}
class InitialState extends State {
...
public boolean processMessage(Message message) {
...
switch (message.what) {
1) case CMD_START_SUPPLICANT:
2) if (mWifiNative.loadDriver()) {
...
mWifiMonitor.killSupplicant(mP2pSupported);
3) if(mWifiNative.startSupplicant(mP2pSupported)) {
mWifiMonitor.startMonitoring();
...
4) mWifiMonitor.startMonitoring();
...
private static class WifiMonitorSingleton {
...
public synchronized void startMonitoring(String iface) {
WifiMonitor m = mIfaceMap.get(iface);
...
}
...
}