티스토리 뷰

반응형

Stack Overflow에 자주 검색, 등록되는 문제들과 제가 개발 중 찾아 본 문제들 중에서 나중에도 찾아 볼 것 같은 문제들을 정리하고 있습니다.

Stack Overflow에서 가장 먼저 확인하게 되는 가장 높은 점수를 받은 Solution과 현 시점에 도움이 될 수 있는 가장 최근에 업데이트(최소 점수 확보)된 Solution을 각각 정리하였습니다.

 

아래 word cloud를 통해 이번 포스팅의 주요 키워드를 미리 확인하세요.

Using Application context everywhere?

어디에서나 어플리케이션 컨텍스트 사용하기

 문제 내용 

In an Android app, is there anything wrong with the following approach:

Android 앱에서 다음 접근 방식에 문제가 있습니까?
public class MyApp extends android.app.Application {

    private static MyApp instance;

    public MyApp() {
        instance = this;
    }

    public static Context getContext() {
        return instance;
    }

}

 

and pass it everywhere (e.g. SQLiteOpenHelper) where context is required (and not leaking of course)?

컨텍스트가 필요한 모든 곳(예: SQLite OpenHelper)에 전달할 수 있습니까?

 

 

 

 높은 점수를 받은 Solution 

There are a couple of potential problems with this approach, though in a lot of circumstances (such as your example) it will work well.

이 접근 방식에는 몇 가지 잠재적인 문제가 있지만, 많은 상황(예: 사용자의 경우)에서는 잘 작동합니다.

 

In particular you should be careful when dealing with anything that deals with the GUI that requires a Context. For example, if you pass the application Context into the LayoutInflater you will get an Exception. Generally speaking, your approach is excellent: it's good practice to use an Activity's Context within that Activity, and the Application Context when passing a context beyond the scope of an Activity to avoid memory leaks.

특히 컨텍스트가 필요한 GUI를 다룰 때는 주의해야 합니다. 예를 들어, 어플리케이션 컨텍스트를 레이아웃 인플레이터로 전달하면 예외가 발생합니다. 일반적으로, 여러분의 접근 방식은 훌륭합니다. 메모리 누수를 방지하려면 해당 액티비티 내에서 액티비티 컨텍스트를 사용하고, 액티비티를 범위를 벗어난 컨텍스트를 전달할 때는 어플리케이션 컨텍스트를 사용하는 것이 좋습니다.

 

Also, as an alternative to your pattern you can use the shortcut of calling getApplicationContext() on a Context object (such as an Activity) to get the Application Context.

또한 당신의 패턴 대신 컨텍스트 개체(예: 액티비티같은)에서 getApplicationContext()를 호출하여 어플리케이션 컨텍스트를 가져올 수 있습니다.

 

 

 

 가장 최근 달린 Solution 

Application Class:

응용 프로그램 클래스:
import android.app.Application;
import android.content.Context;

public class MyApplication extends Application {

    private static Context mContext;

    public void onCreate() {
        super.onCreate();
        mContext = getApplicationContext();
    }

    public static Context getAppContext() {
        return mContext;
    }

}

 

Declare the Application in the AndroidManifest:

Android 매니페스트에서 애플리케이션 선언:
<application android:name=".MyApplication"
    ...
/>

 

Usage:

용도:
MyApplication.getAppContext()

 

 

출처 : https://stackoverflow.com/questions/987072/using-application-context-everywhere

반응형
댓글
공지사항
최근에 올라온 글