2010-04-20 5 views
0

내 애플리케이션에 정적 부울 값이있는 SMS 브로드 캐스트 리시버를 사용하여 리시버를 활성화 또는 비활성화합니다.Android 라이프 사이클 문제

public class SmsListener extends BroadcastReceiver { 

     public static boolean activated = false; 


     @Override 
     public void onReceive(Context context, Intent intent) 
      if (activated){ //do something 
       } 
     ... 
     } 
} 

다음 (이 정적 값을 통해) SMS 수신기를 활성화하거나 활성화하지 않는 위젯이 있습니다. 모든 것이 잘 작동하지만 전화 메모리가 낮아지면 SMS 수신자가 상태를 잃어 응용 프로그램이 예상대로 작동하지 않는다는 것을 알게되었습니다. 안드로이드 라이프 사이클과 관련된 것 같아요. 백그라운드에서 서비스가 없으며 시스템이 프로세스를 종료합니다. 내가 사용했던 접근 방식을 피해야할까요? 나는 항상 안드로이드 프로세스 죽이기를 피하기 위해서만 서비스를 시작해야합니까?

감사

Tobia Loschiavo

답변

0

내가 전역이 발견 한 신뢰할 수있는 유일한 방법은 서비스에 넣어하는 것입니다. 안드로이드 방식은 onSaveInstanceState를 사용하고 그 상태로 호출 될 수도 있고 호출되지 않을 수도있는 모든 다양한 메소드에서 상태를 복구하는 것입니다. 그것도 완전히 신뢰할 수 없기 때문에 onPause에서 상태를 환경 설정에 쓰고 onResume에서 읽을 수 있습니다.

또한 매니 페스트에 따라 메모리가 부족할뿐만 아니라 키보드를 열거 나 전화를 돌리는 것과 같은 활동이 중단 될 수 있습니다.

+0

환경 설정에 활성화가 저장되어 있습니다 ... 작동 중입니다. – Matroska

+0

AlarmManager를 사용하여 Alarm을 설정했습니다. 응용 프로그램이 종료되면 경보가 살아남습니까? 문서에서 그렇다고 봅니다. – Matroska

+0

거의 모든 것이 활동에서 오래 지속됩니다. 그들은 존재하지 않는 상태에서 계속해서 깜박이도록 고안되었습니다. – drawnonward

관련 문제