티스토리 뷰
Stack Overflow에 자주 검색, 등록되는 문제들과 제가 개발 중 찾아 본 문제들 중에서 나중에도 찾아 볼 것 같은 문제들을 정리하고 있습니다.
Stack Overflow에서 가장 먼저 확인하게 되는 가장 높은 점수를 받은 Solution과 현 시점에 도움이 될 수 있는 가장 최근에 업데이트(최소 점수 확보)된 Solution을 각각 정리하였습니다.
아래 word cloud를 통해 이번 포스팅의 주요 키워드를 미리 확인하세요.
Get Context in a Service
서비스에서 컨텍스트 가져오기
문제 내용
Is there any reliable way to get a Context
from a Service
?
서비스에서 컨텍스트를 가져올 수 있는 신뢰할 수 있는 방법이 있습니까?
I want to register a broadcast receiver for ACTION_PHONE_STATE_CHANGED
but I don't need my app to always get this information, so I don't put it in the Manifest
.
ACTION_PHONE_STATE_CHANGED에 브로드캐스트 리시버를 등록하고 싶지만 항상 이 정보를 얻기 위해 앱이 필요하지 않기 때문에 매니페스트에 넣지 않습니다.
However, I can't have the broadcast receiver be killed by the GC when I need this information so I'm registering the broadcast receiver in a Service
.
하지만, 이 정보가 필요할 때 브로드캐스트 리시버를 GC에 의해 죽이게 할 수 없어서 그 리시버를 서비스에 등록합니다.
Hence, I need a Context
to to call registerReceiver()
. When I no longer need the ACTION_PHONE_STATE_CHANGED
I unregister it.
따라서 registerReceiver()를 호출하려면 컨텍스트가 필요합니다. 더 이상 ACTION_PHONE_STATE_CHANGED가 필요하지 않으면 등록을 취소합니다.
Any tips?
팁이 있나요?
높은 점수를 받은 Solution
서비스는 컨텍스트입니다.
가장 최근 달린 Solution
just in case someone is getting NullPointerException
, you need to get the context inside onCreate().
누군가 NullPointer를 받을 경우를 대비하여 예외적으로 onCreate()에서 컨텍스트를 가져와야 합니다.
Service
is a Context
, so do this:
서비스는 컨텍스트이므로 다음을 수행합니다.
private Context context;
@Override
public void onCreate() {
super.onCreate();
context = this;
}
Note:
참고:
Read: "Do not place Android context classes in static fields; this is a memory leak (and also breaks Instant Run)" Do you know what context classes are? Activity is one of them, and you should not store Activity as a static field, (or it will leak memory). However, you can store Context (as long as it is the application context) as a static field, since it outlives everything.
읽기: "안드로이드 컨텍스트 클래스를 정적 필드에 배치하지 마십시오. 이는 메모리 누수입니다(그리고 인스턴트 실행도 중단됩니다)." 컨텍스트 클래스가 무엇인지 알고 있습니까? 액티비티는 그 중 하나이며, 액티비티를 정적 필드로 저장해서는 안 됩니다. 그렇지 않으면 메모리가 누수됩니다. 그러나 컨텍스트(응용프로그램 컨텍스트인 경우)는 모든 것보다 오래되기 때문에 정적 필드로 저장할 수 있습니다.
출처 : https://stackoverflow.com/questions/6446221/get-context-in-a-service
'개발 > 안드로이드' 카테고리의 다른 글
Android 웹뷰 로딩 속도 문제 (0) | 2022.12.06 |
---|---|
AsyncTask Android 예제 (0) | 2022.12.06 |
메시징을 사용한 액티비티와 서비스 간 커뮤니케이션 예제 (0) | 2022.12.06 |
시스템 오버레이 윈도우(항상 다른 앱 위에) 만들기 (0) | 2022.12.05 |
컨텍스트 또는 액티비티 외부에서 getString 사용하기 (0) | 2022.12.05 |