온라인 거래를위한 데이터를 수집하는 활동이 있습니다. 컬렉션이 완료되면 웹 서비스를 호출하고 응답을 기다리는 백그라운드 스레드 (특히 AsyncTask)를 실행 한 다음이를 활동으로 리턴합니다. 한편, 진행 대화 상자가 나타납니다.Android 백그라운드 스레드 관리 및 활동주기
응용 프로그램이 완료되거나 사용자가 취소하더라도 (웹 서비스에 계속 알릴 필요가 있음) 백그라운드 프로세스가 취소되도록하고 구성 변경으로 인해 작업이 손상된 경우 그대로 유지합니다. 또는 기억. onRetainNonConfigurationInstance()를 사용하여 AsyncTask에서 내 액티비티를 분리하고 유지 한 후 다음 액티비티에 다시 연결하려면 이미 인프라가 있습니다. 또한 일부 라이프 사이클 콜백에서 isFinishing 메소드가 내 앱이 정상적으로 종료되는지 알려줍니다. 진행 대화 상자의 콜백에서 사용자 취소를 처리 할 수 있다고 생각합니다.
나는 두 가지 간단한 질문 한 내 활동 이 메모리 부족으로 인해 사망하는 경우()를
윌 onRetainNonConfigurationInstance를 호출? (그 이유가 구성 변경 인 경우 알 수 있습니다.)
onStop() 및 onDestroy()가 호출되지 않는 상황은 무엇입니까 (개발자 가이드에서 강조한대로)? (필자는 취소 처리 내 코드는 항상 실행하면 것인지 알고 싶습니다.)
모두 모두, 나는 확신 할 수 onRetainNonConfigurationInstance()와 isFinishing와들의 OnDestroy를()() 구현하여 모든에 체크하는 것이 상황, 내 배경 스레드가 그에 따라 처리됩니까?
보너스 질문 : 내 애플리케이션이 어떤 이유로 강제 종료되는 경우 (영구적으로 말하면), 비동기 태스크가 응답을 저장하는 방법을 어떻게 제공 할 수 있습니까? 공유 환경 설정의 인스턴스를 유지하고 그 안에 데이터를 쓸 수 있습니까?
탁신, 나는 당신이 응답하는 사람이 되길 바랬습니다! 그래서 메모리 부족으로 프로세스가 종료 될 때 isCancelled()가 감지 될 때마다 다른 웹 서비스 호출을 할 기회가 없으며 데이터를 쓸 충분한 시간을 가지기를 바랄뿐입니다 (여전히 공유 환경 설정을 사용할 수 있습니까? 이것을 위해 또는 또한 파괴되고 그래서 이렇게 충고되지 않았습니까?). finish를 호출하기 전에 백그라운드 스레드를 취소 할 수 있다고 생각합니다. onReatinNonConfigurationInstance()는 구성 변경을 처리하기에 충분합니다. – Vincent
@Vincent : "이것에 대한 공유 환경 설정을 사용할 수 있습니까? 아니면 파괴되어서 알려지지 않았습니까?" -'SharedPreferences'의 값은 앱이 제거 될 때까지 "파기"되지 않습니다. 즉,'SharedPreferences'는 다른 종류의 파일을 사용하는 것보다 점점 더 나아졌습니다. 다른 것들을 위해 데이터베이스를 사용하고 있다면, 나는 거래 정보이기 때문에 거기에 정보를 저장하는 것을 고려할 것입니다. – CommonsWare
저장소를 의미하는 것이 아니라 개체를 작성하는 데 사용해야하는 개체입니다. 내가 추측 할 수있는 한, 현재 응용 프로그램과 연결되어 있습니다. 나는 아주 적은 양의 임시 데이터 만 저장되기 때문에 아직 데이터베이스를 사용하지 않습니다. 그러나, 나는 생각, transactonality 꽤 좋은 소리를 고려할 것입니다. 답변 해 주셔서 감사합니다. – Vincent