티스토리 뷰
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
'개발 > 안드로이드' 카테고리의 다른 글
그리드 레이아웃에서 Fling 제스처 감지하기 (0) | 2022.12.02 |
---|---|
URL을 클릭시 기본 브라우저 실행 문제 (0) | 2022.12.02 |
안드로이드 애플리케이션에서 액티비티 사이에 데이터 전달하기 (0) | 2022.12.02 |
안드로이드 CalledFromWrongThreadException 수정하기 (0) | 2022.12.02 |
Android에서 화면 크기를 픽셀로 가져오는 방법 (0) | 2022.12.01 |