2012-07-02 3 views
8

Android에서 개발하는 동안 다소 이상한 동작이 발생했습니다. Google 검색 중 찾을 수있는 유일한 대답은 설계 상으로는 걱정하지 않아야한다는 것입니다. .안드로이드 폰의 화면 잠금으로 인해 몇 차례의 onPause/onResume 이벤트가 발생합니다.

내 응용 프로그램이 활성화되어있는 동안 위치 데이터를 가져오고 onPause 이벤트가 호출 될 때 위치 업데이트를 중지하고 나중에 onResume 이벤트가 호출 될 때 페치를 다시 시작하여 배터리를 보존하는 방법을 구현하려고했습니다.

디버깅하는 동안 전화를 잠글 때이 이상한 동작을 발견했습니다. onPause-> onResume은 3 번 이상 호출 된 다음 onStop 이벤트로 끝납니다. 어디서나 찾을 수있는 유일한 대답은 마치 안드로이드가 작동하는 방식입니다.

내가 궁금한데 누군가가 나에게 몇 번 간단한 하위 활동을 중단하고 다시 시작할 필요성을 설명 할 수 있을까요? 더 많은 배터리를 소비하지 않습니까, 특히 onResume에 심각한 코드가있는 더 큰 활동의 경우? 이런 일이 발생하지 않도록하는 방법이 있습니까? 불필요한 CPU 사이클을 방지하는 if {} 블록을 사용하여 적어도 이러한 이벤트의 코드가 호출되지 않는다는 것을 알면 매우 기쁩니다.

어떤 통찰력이라도 대단히 감사합니다!

답변

1

"화면 제한 시간"및 "화면 잠금"이벤트를 처리하기 위해 브로드 캐스트 수신기를 등록해야합니다.

데이터 검색을 중지하면됩니다. 샘플 코드 : 당신은 내가 최근에 같은 문제로 실행 및 구성 변경을 재생하여 발생을 중지 할 수 있었다

+0

감사합니다. 아마 그렇게 할 것입니다. 사실 내가 왜 이런 일이 일어나는지에 대한 자세한 내용을 찾고 있었지만 아마 너무 많이 묻고 있습니다. – r41n

0

androidMenifest.xml이 ScreenReceiver 클래스에 대한 방송 수신기를 등록해야

public class ScreenReceiver extends BroadcastReceiver {  

     @Override 
     public void onReceive(Context context, Intent intent) { 
      if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) { 
       //screen locked, do here 
      } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) { 
       //screen unlocked, do something here 
      } 
     } 

} 

매니페스트 파일의 활동 사용자가 기기를 잠그면 몇 가지 문제가 발생할 수 있습니다. 방향이 바뀔 수 있고 화면 크기가 변경 될 수 있습니다 (탐색 또는 알림 바가 사라지는 경우). 그러면 Android가 모든 활동을 다시 작성합니다. & 조각. 내가 구성 변경에서 많은 옵션을 선택하고 onPause 후 onResume 호출을 중지했습니다.