마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

Application을 상속받아 구현하는 전역변수 질문

0 추천
안드로이드 Application을 상속받아 전역변수를 구현하는 과정에서 MainActivity에 해당 클래스를 선언하고 Manifest.xml에 등록한 후에  get, set을 한 후에 다른 클래스에서 getApplication으로 받아오려고 하면 다른 메모리 주소의 객체를 받아오던데 버전이 높아지면서 Garbage Collector가 지워버리는걸까요??
안드로이드이제시작 (160 포인트) 님이 2018년 5월 4일 질문

1개의 답변

0 추천
저는 이렇게 사용합니당

public class MyApp extendsApplication {
  private static MyApp instance;

  public static Context getContext() {
    return instance;
  }

  @Override
  public void onCreate() {
    super.onCreate();
    instance = this;    
  }
}

MyApp클래스에 함수를 작성하고 필요할때마자 MyApp.func()로 호출해서 사용합니다.

static으로 지정하면 언제든 사용될수 있어 사용중이라고 판단해서 GC가 지우지 않으니까요
Bateaux (5,200 포인트) 님이 2018년 5월 4일 답변
그런데 자바에서 static은 지양하는 문법 아닌가요...??
지양하는 방식이 맞긴 합니다.
대신 이경우에는 새로운 변수로 호출되는것이 아니라 같은 객체를 사용하게 되죠
static은 줄이고 안쓰는게 좋지만 필요할땐 거듭 판단해보고 괜찮다고 생각하면 사용하는것도 좋다고 봅니다
그렇군요 감사합니다! 그런데 어차피 static으로 변수를 선언한다면 Applicatin을 꼭 extends해야 하는 이유가 있을까요??? 위에서 적어주신 MyApp에서 extends를 제외하면 안되나요!?
static으로 작성하는것은 같은 Application객체를 받아오기 위함입니다
같은 객체를 사용해야되는 상황이 아니면
1. MyApp app = (MyApp) getApplicationContext();
2. MyApp app = (MyApp) getApplication();
둘 중 하나를 사용하면 되겠습니다

Application클래스를 상속받아 사용하는 이유는 상속받은 클래스가 앱이 실행될때 가장먼저 호출되며 앱 전역에서 데이터를 공유할 수 있기 때문입니다

sqlite나 앱 전체에 등록하는 provider나 receiver 등 무거운 작업들을 미리 끝내두면 액티비티 옮겨다닐때 보다 편해집니다
...