2013-02-10 3 views
3

안드로이드 라이프 사이클 모델을 이해하면 onPause()을 호출 할 때 내 앱을 반환 한 후에 언제든지 내 앱이 종료 될 수 있으므로 저장해야하는 상태를 저장해야합니다. 나는 진저 브레드를 목표로하고 있으니, onStop은 절대로 호출되지 않을 수도 있습니다.안드로이드를 사용하여 Android onPause에 저장하는 방법 HttpRequest

그러나 내 응용 프로그램에서 일부 상태가 원격 서버에 저장되고 있습니다. 주기적으로이 상태를 플러시하지만 onPause가 호출되면 올바른 작업이 확실하지 않습니다. 내 이해가 onPause가 반환되자 마자 내 앱이 종료 될 수 있기 때문입니다. 나는 다른 스레드에서 안드로이드 HTTP 요청을 실행해야하므로 문제가있는 것 같습니다. onPause에서 요청을 시작한 다음 반환하면 상태를 저장하는 원격 요청이 끝나기 전에 내 응용 프로그램이 종료 될 수 있습니다 (또는 시작되기도합니다!).

내가 잠자기에 가서 작업 요청을 기다리는 동기화를해야한다고 생각하지만, 먼저 onPause에서이 작업을 수행 할 수 있는지 잘 모르겠다. 두 번째로 onPause는 가정되지 않는다. 완료하는 데 너무 오래 걸리므로 네트워크 지연이 있으면 문제가 발생할 수 있습니다.

상태를 원격 서버로 플러시해야하거나 일반적으로 별도의 스레드가 필요한 일부 메서드로 플러시 할 필요가있을 때 onPause에 상태를 저장하는 몇 가지 권장 방법이 있습니까?

답변

2

권장되는 방법 :

OnPause의 서비스 (안드로이드 서비스)를 시작하고 해당 서비스에서 서버로 상태를 플러시하고 이후에 서비스를 종료 원하는 작업 완료.

+0

정말 간단 할 수 있습니까? 나는 이미 내 평범한 일을하고있는 중이 야. 내 관심사는 내 서비스가 활동과 동일한 프로세스의 일부이기 때문에 서비스가 활동과 함께 종료 될 수 있다는 것입니다. – Michael

+1

잘 작동하는 것 같습니다. 감사! – Michael

+0

@Michael 항상 서비스가 당신의 활동으로 끝나지 않는다는 것을 기억하십시오. (정상적인 것은 UI 나 활동이 죽으면 응용 프로그램도 죽지 않는다는 뜻입니다.) "그리고 그냥 그것 때문에 당신은 당신이 원하는 작업 - * (다른 응용 프로그램이나 다른 응용 프로그램에서 AIDL 다른 프로세스를 통해 그것을 사용하여 다른 구성 요소에 의해 사용되지 않는 경우에만) 항상 닫아야한다" –

2

완전히 당신이 무엇을하고 있는지 모르겠지만,

당신은 당신이 여기에서 스레드를 생성 할 때이 때 활동 히트의 onPause 살해되지 않습니다하는 Service으로 HttpRequest를 넣을 수 없습니다.

BroadcastReciever을 사용하여 앱에 다시 전화 할 수 있으며, 아직 시작하지 않은 경우 활동을 시작합니다.

상태가 원격 서버에 플러시 할 필요가 onPause에 상태를 저장의