[kotlin] global application context

안드로이드는 context 라는 걸 넘겨줘야해서 무지 귀찮다.

그래서 이렇게 앱 전체에서 사용할 수 있는 context 를 만들어두면 편하다.

인터넷을 돌아다니며 memory leak이 없는 코드를 찾아내서 이렇게 사용하고 있다.

public class App extends Application {
  private static App instance;

  public static App instance() {
    return instance;
  }

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

  public Context context() {
    return getApplicationContext();
  }
}

 

 

코틀린에서는 나중에 더 좋은 방법이 나오면 그걸로 바꾸기로하고 일단 이렇게 쓰면 될 것 같다.

class App : Application() {
  init {
    instance = this
  }

  companion object {
    private var instance: App? = null

    fun context() : Context {
      return instance!!.applicationContext
    }
  }
}

 

이렇게도 가능하다(출처: https://antonioleiva.com/objects-kotlin/)

class App : Application() {
  companion object {
    lateinit var instance: App
      private set
  }

  override fun onCreate() {
    super.onCreate()
    instance = this
  }

  fun context(): Context = applicationContext
}