출처 : http://lonelyshadow.tistory.com/77

개발을 하다보면 어플리케이션 전체에서 적용되는 전역 변수, 혹은 단 하나의 인스턴스를 사용해야할 때가 있다.

현재 XMPP를 이용하여 개발을 하고 있는데, connection을 단 하나만 유지해야한다.

보통 Java를 사용할 때는 Singleton을 이용하여 유일한 인스턴스를 생성하는데, (나도 처음에 Android Activity, Service와는 별개로 Singleton을 만드는 Class를 만들었었고..)

이 Singleton에서 Activity나 Service로 데이터를 주고 받는 것이 여간 어려운 일이 아니다.

실제로 만들었을 때도, Service에서 Singleton에 있는 인스턴스를 받아오려고 했더니 인스턴스를 새로 생성하고... 하여간 문제가 많다 -_-...

그런데 조금 찾아보니, Android에서 Singleton을 사용할 필요가 없었다.

Android에서는 어플리케이션 전체에 사용되는 변수 및 함수를 넣어놓는 Application Class가 있기 때문이다.

Activity 생성때와 마찬가지로 Application을 상속받아서 Application Class를 만들고,

Menifest.xml에서 현재 존재하는 application 항목에 android:name을 추가하여 만들어진 Application Class의 이름을 넣어주면 된다.

Application Class에는 Context가 존재하기 때문에, SQLiteDatabase도 바로 사용할 수 있으므로 데이터 주고 받는 것이 굉장히 편해진다. 물론 Singleton의 장점을 사용할 수 있는 것은 두말할 필요도 없고.

onCreate()로 Application 실행시의 동작을 정해주고

onTerminate()로 종료시의 동작을 정해줄 수도 있다.

Activity에서 불러올 때는,

ApplicationClassName ACN = (ApplicationClassName)getApplicationContext();
으로 생성하여 사용하면 되겠다

+ Recent posts