반응형
Notice
Recent Posts
Recent Comments
관리 메뉴

꿈꾸는 사람.

[Android] Wi-Fi 서비스에서 JAVA Hashmap 사용 예. 본문

IT/Language_Design Patterns

[Android] Wi-Fi 서비스에서 JAVA Hashmap 사용 예.

현무랑 니니 2015. 3. 3. 02:52
반응형












1. JAVA Hashmap 개요.

Hashmap은 Key-Value 컨셉인 Map 인터페이스에 기반한 자료구조로 특정 키(Key)로 저장된 값(Value)을 빠르게 찾을 수 있다.

Hashmap은 저장된 순서는 보장하지 않지만 데이터의 저장하고(put) 읽어오는(get) 기능은 일정 시간 내에 결과를 얻을 수 있다.


Hashmap의 사용법은 오라클 공식 자바 사이트나 검색으로 충분히 찾을 수 있다.

이 글은 안드로이드 키캣 버전에서 Wi-Fi 서비스에서 hashmap을 사용하는 예를 설명한다.

2. Android] Wi-Fi 서비스에서  Hashmap  사용 예.

WifiService, WifiP2pService  생성하는 sequence diagram

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 데이터 저장
WifiService와 WifiP2pServcie의 서비스가 생성될 때 아래 코드가 호출되어 해당 WifiMonitor 데이터가 저장된다.

WifiMonitor.java 파일 내에 아래와 같은 코드로 정의되어 있다.

private static class WifiMonitorSingleton {

...

    public synchronized void registerInterfaceMonitor(String iface, WifiMonitor m) {

        mIfaceMap.put(iface, m); 

    }

...

}


인터페이스에 관련된 WifiMonitor 데이터 읽기
사용자가 Wifi 메뉴에서 On을 선택하면 
1) CMD_START_SUPPLICANT 이벤트가 발생하여 
2) 드라이버를 적재하고 
3) wpa_supplicant를 시작한다.
4) 관련된 WifiMonitor 데이터를 읽어 모니터링을 시작한다.

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();

    ...

}

WifiMonitor.java 파일의 WifiMonitorSingleton 에서 데이터를 읽어온다.

private static class WifiMonitorSingleton {

...

    public synchronized void startMonitoring(String iface) {

        WifiMonitor m = mIfaceMap.get(iface); 

        ...

    }

...

}


반응형
Comments