2012-04-14 7 views
0

REST API를 통해 서버에서 데이터를 수신 한 작은 Android 애플리케이션을 구현했습니다. 모든 활동에는 서버에서 요청 된 데이터를 가져 오는 AsyncTask가 있습니다. ThreadSafeConnManager와 함께 DefaultHttpClient를 사용하고 클라이언트는 그것을 재사용하기 위해 싱글 톤입니다. 앱을 테스트하고 활동을 수행 할 때 이상한 문제가 있습니다. 모든 것이 잠시 작동하고 갑자기 데이터를받는 데 더 오래 걸리고 오래 걸립니다. 액티비티에서 뒤로 버튼을 눌렀을 때 발생합니다. 클라이언트 연결이 풀어 놓지 않은 asynctask와 새로운 작업이 연결되지 않기 때문에 용의주도합니다. 그러나 모든 HttpGet에서 새 클라이언트 인스턴스를 만드는 경우에도 마찬가지입니다.Android DefaultHttpClient REST API

나는이 문제와 아무런 단서가 붙어 있지 않았다. 어떤 도움을 주셔서 감사합니다.

감사 및 BR 피터

답변

0

AsyncTasks 특히 장기 실행 작업으로, 가지 까다로운. 요청을 채우려는 시도가 여러 개있을 가능성이 있습니다. 그 과정에서 클라이언트가 차단할 것이라는 것을 기억하십시오.

asyncTasks와 요청 큐가있는 스레드 서비스로 이동하는 것이 좋습니다. asyncTasks를 계속 사용하려면 취소가 제대로 구현되었는지 확인하십시오.

희망이이 문제는 논의 된

+0

안녕하세요! 요청을 취소하려고했습니다. (모든 활동이 아님) 취소 방법은 어디에 두어야합니까? onPause 및 onDestroy 메서드에서? cancel 메소드는 연결을 해제합니까? 감사! – hcpeter

0

을하는 데 도움이 : closeExpiredConnections에서

  • 모습을 connectionMgr에 대한 디버그 수준 로깅에 Android HttpClient performance

    1. 차례

      , 검사주기 이벤트() 메소드의 모습 at

    2. closeIdleConnections (long idleTimeout, TimeUnit tunit)

    당신은 connectionPool의 연결 수명주기를 조금 더 자세히 살펴 봐야한다고 생각합니다. 특히 유휴 상태와 사용되지 않는 연결을 닫거나 다시 사용하는 것이 좋습니다.

    ThreadSafeConnManager에 대한 API/문서를 보거나 소스를 볼 수 있습니다.

  • +0

    시도했지만 잘 작동하지 않았습니다. 각 클릭마다 몇 번의 클릭만으로 무한 진행률 표시 줄이 나타납니다. – hcpeter

    0

    여기 Nelson이 제안한 것과 동일한 페이지에서 사례에 대한 적절한 접근 방식이 있습니다.

    나는 내 요청과 스레드 집행자를보다 잘 제어하려고 노력할 것입니다. Asynctask의 풀은 제한되어 있음을 기억하십시오. 작업 시간이 길면 요청이 대기열에 들어갑니다.

    http://joseluisugia.wordpress.com/2012/08/03/using-runnables-queues-and-executors-to-perform-tasks-in-background-threads-in-android/