2012-11-02 5 views
0

제 신청서에는 CommosWare의 WakefulIntentservice이 있습니다. doWakefulWork 메서드에서 나는 몇 가지 자체 작성 메서드를 호출합니다. 예를 들면 :Android : Commonsware의 WakefulIntentservice에서 자체 작성 방법을 피하는 것이 좋습니까?

@Override 
protected void doWakefulWork(Intent arg0) { 
    exampleMethod(); 
} 

private void exampleMethod() { 
    //Stuff 
} 

그것은 내 코드가 명확 유지하지만 내가 자기 기록 방식을 호출 할 때 WakeLock 손실의 기회가?

미리 감사드립니다.

답변

1

"자체 작성된 메서드"가 스레드를 포크하거나 다른 방식으로 비동기 적으로 수행하지 않는 한 안전합니다.

+0

하나 더 질문 : 메서드를 실행할 수있는 최대 시간이 있습니까? – Xander

+1

@Merlin : 음, 결국 태양은 불타거나 노바 등으로 갈 것입니다. 나는 그 전까지 끝내려고했다. :-) – CommonsWare

+0

Looooooooool XD – Xander

2

메서드를 호출한다고해서 doWakefulWork을 떠나야한다는 의미는 아닙니다. 메소드의 코드 행을 호출 메소드에 복사하는 것과 같습니다.

그래서이 여기

protected void doWakefulWork(Intent arg0) { 
    exampleMethod(); 

    exampleMethod2(); 
} 

private void exampleMethod() { 
    exampleMethod2(); 
    exampleMethod2(); 
} 

private void exampleMethod2() { 
    print("Hello"); 
} 

는 메소드를 호출 할 때

protected void doWakefulWork(Intent arg0) { 
    { // exampleMethod() 
     { // exampleMethod2() 
      print("Hello"); 
     } 
     { // exampleMethod2() 
      print("Hello"); 
     } 
    } 

    { // exampleMethod2() 
     print("Hello"); 
    } 
} 

또는 모든 괄호없이

protected void doWakefulWork(Intent arg0) { 
    print("Hello"); 
    print("Hello"); 
    print("Hello"); 
} 

그래서 당신은 doWakefulWork을 떠나지 않을이 여기에 정확히 같은 일을 그러므로 WakeLock은 없어지지 않습니다.

+0

은'asynchronous' 호출과 함께 갈 수 있습니다 ... –

+0

@AkhilJain 제가 말하고자 한 것은 직접적인 메소드 호출은 비동기 적이 지 않을 수 있으며 호출하는 메소드에 인라인 될 수 있다는 것입니다. 그리고 당신은 wakelock보다 오래 지속되는 비동기적인 것들을 시작하기 위해 "자체 작성된 메소드"가 필요하지 않습니다. – zapl