programing

서비스에서 컨텍스트 가져오기

padding 2023. 7. 27. 21:40
반응형

서비스에서 컨텍스트 가져오기

신뢰할 수 있는 방법이 있습니까?Contexta부터Service?

다음에 대한 방송 수신기를 등록하고 싶습니다.ACTION_PHONE_STATE_CHANGED하지만 항상 이 정보를 얻기 위해 내 앱이 필요하지 않기 때문에 나는 그것을 저장하지 않습니다.Manifest.

그러나 이 정보가 필요할 때 GC에 의해 방송 수신기를 죽일 수 없으므로 방송 수신기를 등록합니다.Service.

그러므로, 나는 필요합니다.Context부르는 쪽으로registerReceiver()더 이상 필요하지 않을 때ACTION_PHONE_STATE_CHANGED등록 취소합니다.

팁 있어요?

서비스는 컨텍스트입니다.

Service확장된ContextWrapper연장되는Context그러므로Service이다.Context.사용하다'this'서비스의 키워드입니다.

  1. Service확장된ContextWrapper
  2. ContextWrapper확장된Context

그래서..

Context context = this;

(서비스 또는 활동 클래스)

만일의 경우에 대비해서NullPointerException당신은 내부의 맥락을 파악해야 합니다.onCreate().

Service이다.Context다음과 같이 하십시오.

private Context context;

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

참고:

읽기: "Android 컨텍스트 클래스를 정적 필드에 배치하지 마십시오. 메모리 누수이며 인스턴트 실행도 중단됩니다." 컨텍스트 클래스가 무엇인지 아십니까?활동도 그 중 하나이며 활동을 정적 필드로 저장하면 안 됩니다. 그렇지 않으면 메모리가 누출됩니다.그러나 컨텍스트는 모든 것보다 오래 사용되므로 컨텍스트(애플리케이션 컨텍스트인 경우)를 정적 필드로 저장할 수 있습니다.

부터Service이다.Context변수 컨텍스트는 다음과 같아야 합니다.this:

DataBaseManager dbm = Utils.getDataManager(this);   

서비스가 이미 컨텍스트 자체이기 때문에

당신은 심지어 그것을 통과할 수 있습니다.

Context mContext = this;

OR

Context mContext = [class name].this;  //[] only specify the class name
// mContext = JobServiceSchedule.this; 

서비스 컨텍스트를 원하는 경우this키워드만약 당신이 활동 컨텍스트를 원한다면, 당신은 이와 같은 정적 변수를 만들어 그것에 접근할 수 있습니다.

public static Context context;

활동 중에onCreate()

context=this;

이제 서비스 내부의 컨텍스트에 액세스할 수 있습니다.

언급URL : https://stackoverflow.com/questions/6446221/get-context-in-a-service

반응형