0

AlarmManager onReceive에서 서비스를 호출합니다. 아래는 구현입니다. 깨우기 잠금 장치가 제대로 구현되었는지, 내 필요를 충족시킬 수 있는지 알고 싶습니다.서비스에 깨어있는 잠금 구현

이 내 서비스 클래스에서 ONSTART 기능입니다 :

@Override 
public void onStart(Intent intent, int startId) { 
    WakeLock wakeLock = null; 
    try{ 
     PowerManager mgr = (PowerManager)getApplicationContext() 
      .getSystemService(Context.POWER_SERVICE); 
     wakeLock = mgr.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakeLock"); 
     wakeLock.acquire(); 
     //For time consuming an long tasks you can launch a new thread here 
     Toast.makeText(this, " Service Started", Toast.LENGTH_LONG).show(); 
    }catch(Exception e){ 
    }finally{ 
     wakeLock.release(); 
    } 
} 
+0

실제로 해 보았습니까? 그렇다면 작동합니까? 귀하는 귀하의 서비스가 어떻게 작동하는지, 서비스가 무엇인지 또는 귀하의 "필요"가 무엇인지 등에 대해서는 설명하지 않았습니다. 또한 API 5에서는'onStart (...)'가 사용되지 않으므로 - onStartCommand (...)를 사용해야합니다. – Squonk

+0

예. 나는 그것을 시도했기 때문에 내가 뭔가를 놓쳤다는 것을 알기 위해 여기에 게시 한 이유는 정상적인 조건에서 작동하지만 게시의 주된 이유는 '정상적인'것 이외의 경우에서 그 실행에 대해 아는 것이 었습니다. – User3

+0

당신이 deprecation에 대해 지적한 것처럼 보이십시오 :) 기능을 확인하기 위해 코드를 두 번째 프로젝트로 격리했습니다. 지금은 서비스가 토스트 메시지 만 표시하지만 실제 프로그램에서는 일부 거대한 데이터베이스 manuplation을 수행하도록 구현됩니다. 백그라운드 스레드에서 수행하려는 경우,이 경우에는 비동기 작업을 사용할 수 있는지, postExecute에서 wakelock을 취소 할 수 있는지 알고 싶습니다. – User3

답변

0

네, 그건 잘 작동합니다. 새 스레드를 위로 돌리면 작동하지 않지만 스레드가 완료되기 전에 wakelock.release()이 호출됩니다.

CommonsWare의 Wakeful service을 확인하고 싶을 수 있습니다. 이 서비스는 Wakelock 서비스를 처리하며 서비스가 중단되는 즉시 Wakelock을 해제합니다.

+0

통찰력 동료에게 감사드립니다 :) 비동기 태스크를 구현하고 onPostExecute에서 웨이크 잠금을 취소 할 수 있습니까? – User3

+1

@ user2822178 : 예 [WakefulIntentService] (https://github.com/commonsguy/cwac-wakeful)로 이동하십시오. 바퀴를 재발 명하지 마십시오. 또한 다양한 미묘한 점이 있습니다. http://stackoverflow.com/questions/20074035/wakefulintentservice-implementation-clarifications –

+0

감사합니다. 통찰력있는 게시물입니다! – User3

관련 문제