1

내가 이 즉시 내 응용 프로그램이 실행될 때, 나는 그것은 조금 시간이 걸릴 것 REST 서비스, 에 대한 요청을 보낼 수 있고, 다음하고있는 무슨이다, 그래서 나는 onCreate()에서 보여주는 로딩 화면의안드로이드 앱의 REST 서비스 요청 중 로딩 화면이 표시됩니까? 현재 여기

생각 내 활동의 첫 번째 일은 로딩 화면 (진행 대화 상자)을 표시하는 것입니다. AsyncTask를 사용하여 백그라운드 활동을 시작합니다. 즉, REST 서비스를 요청하고 onPostexecute() 대화 상자를 닫은 다음 setContentView(myxml);을 수행하고 UI를 업데이트합니다.

이 접근법을 개선 할 수 있습니까? I이었다 직면

문제,

때때로, 쓰레기 수집기가 (다양한 이유로 인해로)을 시작하고 내 응용 프로그램도 REST 서비스를 요청 때문에 가비지 컬렉터의 영원히 로딩 화면에서 응답이 전송 때문에하지 않습니다 그것의 약간의 모닝콜이오고 나머지는 재앙이고 힘은 닫힌다.

때때로 ForceClose조차도 GC가 빠를 수는 없습니다. 그래서 나는 심지어 돌아가고 화면을 로딩 할 수 없다. 그 시점에서 제가 할 수있는 일은 홈으로 돌아 오는 것입니다. 그 후에도 내 앱으로 돌아 오면 여전히로드 중입니다. 따라서이 접근 방식은 나쁜 디자인 인 것 같습니다. 올바른 접근 방식은 무엇입니까?

+3

나는 완전히 나쁘지 않다고 생각하지 않습니다. 코드화 된 예제 없이는 말하기 어렵습니다. 하지만 장치의 방향이 바뀌면 onCreate() 및 onDestroy()를 올바르게 처리하는 한 오히려 당연한 것처럼 보입니다. ForceClose는 GC 때문에 발생하지 않아야합니다. onPostExecute가 실제로 발생할 수 있는지 확인하고 전체 스레드 풀을 굶기 지 않도록 나머지 서비스 호출에 시간 초과를 설정하십시오. –

답변

1

REST 호출에 상당한 시간이 걸릴 것으로 예상되는 경우 비동기 작업 대신 서비스 사용을 고려해야합니다. 왜? 모든 오리엔테이션 변경에 따라 활동이 파괴되고 새로운 비동기 작업이 다시 생성되므로 REST 호출이 처음부터 다시 완료됩니다. 반면에 서비스를 사용할 때는 REST 호출을 한 번만 실행하고 상태를 추적하면됩니다 (onPause, onCreate 함수를 올바르게 처리해야 함).

가비지 컬렉터와 관련된 문제가 의심 스럽습니다. 강제 종료 후에 스택 추적을 확인하고 실제로 발생하는 것을 이해하려고 시도하십시오. 그것은 당신이 뭔가 잘못하고 있다는 것입니다 ...

+0

Application 클래스를 사용하고 AsyncTask를 참조하면 오리엔테이션 변경에 대해 생각할 필요가 없습니다. 이 질문을보십시오 -> http://stackoverflow.com/questions/4584015/handle-screen-orientation-changes-when-there-are-asynctasks-running/4586760#4586760 – Flo

+0

"Google I/O 2010 - Android REST 클라이언트 애플리케이션 "인 경우 서비스는 REST 앱과 함께 사용하는 것이 좋습니다. 물론, 아무도 당신에게 그렇게하도록 강요 할 수는 없지만 이것은 서비스를 사용하는 또 하나의 이유입니다.Application 클래스가있는 경우를 포함하여 모든 경우에 적어도 방향 변경 후 비동기 작업의 상태를 추적하고 일종의 진행 대화 상자를 다시 표시하는 등 방향 변경에주의해야합니다. 간단히 말해서, 마법의 해결책은 없습니다. 이런 경우에는 여러 가지 사항에주의해야합니다. – dstefanox

+1

문제가 해결되면 한 부분, 바보 같았습니다. 화면을로드하는 중 되돌릴 수 없었습니다. 왜냐하면 진행 대화 상자에서 setCancellable을 true로 사용하지 않았고 onCancelListener를 듣지 않았기 때문에 이것이 가능한 경우에만 적용 할 수 있다고 생각했기 때문입니다. 버튼을 클릭하면 이제 제대로 작동합니다. GC에 관한 문제는 문제가 실제로 발생했는지 여부와 관계없이 해결해야합니다. 모두에게 감사드립니다. – sat

0

Google I/O 2010 - Android REST 클라이언트 애플리케이션을 본 적이 있습니까? 내가 done here

이를 것 같은 당신은 시작 화면을 구현할 수 http://developer.android.com/videos/index.html

+0

그래, 나는 그것을 보았다. 그러나이 경우에는 도움이되지 않습니다. – sat

0

페이지 는 기본적으로 doInBackground() 라인 51)에서 일을하고, 스플래시 이미지를 보여주는 비동기 작업을 시작하고 이후에 전달하는 다음 활동.

+0

가 보일 것입니다, 고맙습니다. – sat