문제

안녕하세요 저는 서비스를 사용하여 wakelock을 제어하려고 노력하고있어 응용 프로그램이 실행될 때 화면을 영구적으로 남길 수 있습니다. wakelock을 생성하고 oncreate ()에서 활성화하고 ondestroy ()에서 해제하지만 "WL은 해결할 수 없습니다"오류가 발생합니다. 누군가 내가 어떻게 이것을 극복 할 수 있는지 설명 할 수 있습니까? 아래 코드 :

public class WakeLockService extends Service {

    @Override
    public IBinder onBind(Intent arg0) {
        // TODO Auto-generated method stub
        return null;
    }  
    @Override
    public void onCreate() {
        PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
        PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "My Tag");
        wl.acquire();
    }
    @Override
    public void onDestroy() {
        wl.release();
    }
}
도움이 되었습니까?

해결책

당신은 라인을 놓치지 않습니까?

    PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "My Tag");

ondestroy ()에서? oncreate ()의 로컬 변수이지만 ondestroy ()에서 전혀 선언되지 않습니다.

또는 더 가능성이 높으면 로컬 변수 대신 클래스 웨이크 락 서비스 필드로 만들 수 있습니다.

다른 팁

인스턴스 변수를 사용하더라도 이것이 그렇게하는 방법이 아니라고 생각합니다. 누가 전화 할 것인가 destroy()? 나는 당신이 아니기를 바랍니다. 그렇게하는 것은 OS 일입니다. 하지만 웨이크 잠금 잠금 장치를 들고있을 때는 destroy() OS가 먼저 다른 활동/서비스를 파괴하기 때문에 방법이 호출됩니다.

그 외에도 웨이크 잠금 장치를 얻기에는 너무 늦었습니다. onCreate() 방법. 전에 onCreate() 알람에서 서비스를 트리거 할 때 전화가 이미 잠들었을 수도 있습니다.

많은 맥락을주지 않기 때문에 다르게 만들어야 할 것을 말하기는 어렵습니다. 일반적인 이벤트 과정은 이것입니다. ㅏ BroadcastReceiver 호출되고 onReceive() 웨이크 잠금 장치를 획득하고 서비스에서 정적 변수에 넣습니다. 서비스가 완료되면 호출해야합니다 stopSelf(), 웨이크 잠금 장치를 해제 한 다음 잠금을 참조하는 정적 변수를 무효화하십시오.

또한 서비스를 사용하는 경우 풀 웨이크 잠금 장치는 원하는 것이 아니라 부분적인 웨이크 잠금 장치입니다. 화면이 계속 필요하지 않습니까?

죄송하지만, 위에서 설명한 문제로 인해 웨이크 잠금 장치는 실제로 사용하기가 복잡합니다. 확실히 고급 주제이며 조이기 쉽습니다. 그렇게한다면, 앱은 너무 오랫동안 유지하는 것이 배터리를 배출 할 때 큰 공격이기 때문에 앱이 매우 추악한 의견을 얻습니다. 이것을 잘못 생각하지 마십시오. 그러나 여기에 게시 한 문제의 특성 (구문 / 컴파일러 오류)을 감안할 때 서비스 및 웨이크 잠금 장치없이 솔루션을 검색하는 것이 좋습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top