2011-05-05 4 views
0

wakelocks를 올바르게 구현하지 않아야합니다. 이게 내가 한 일이야. 이 올바른지?Wakelocks가있는 상태에서도 Android 서비스가 중지됨

private static final String LOCK_NAME_STATIC="domination.shredAssistant.locationService"; 
private static volatile PowerManager.WakeLock lockStatic=null; 

synchronized private static PowerManager.WakeLock getLock(Context context) { 
    if (lockStatic==null) { 
     PowerManager mgr=(PowerManager)context.getSystemService(Context.POWER_SERVICE); 

     lockStatic=mgr.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, 
                LOCK_NAME_STATIC); 
     lockStatic.setReferenceCounted(true); 
    } 

    return(lockStatic); 
} 

//onStart 
public void onStart(Intent intent, int startId) { 
     super.onStart(intent, startId); 
     if (running == false) { 
      Context ctxt=getApplicationContext(); 
      getLock(ctxt).acquire(); 
      running = true; 
      readResorts(); 
      serviceHandler = new Handler(); 
      serviceHandler.postDelayed(new RunTask(),1000L); 
      runtest=true; 
      locupdate(0,0); 
     } 

} 

나는 서비스가 여전히 내가 사용하더라도 일정 기간 getLock (ctxt) .acquire 후 살해 이유) (알아낼 수없는 ONSTART 방법; 당신의 도움을 주셔서 감사합니다! -Dom

답변

1

서비스가 꽤 자주 비활성 상태 인 경우 Android가 종료합니다. 일반적으로 개발자는 서비스를 우선 순위로 설정하지만 이로 인해 배터리 수명이 저하됩니다. 장기 실행 서비스를 유지해야하는 경우 서비스 클래스에서 새 startForeground API를 사용하여 알림 표시 줄에 아이콘을 게시해야합니다.

developer.android

나는 안드로이드 1.5 당신이 그것을 필요로하는 경우에 1.6이 이전 버전과 호환 만드는 클래스 .... ServiceForegrounder.java

을 생성
관련 문제