然而将解析操作写在doInBackground方法中不会报错。
PHP中文网2017-04-17 17:38:35
그렇습니다. 원본 포스터의 결과(InputStream)는 원격 리소스를 가리키는 InputStream입니다. 이때 InputStream에서 데이터를 읽는 것은 원격 리소스를 읽는 것과 동일하므로 오류가 보고됩니다. 근본적인 이유는 Android의 "네트워크 요청은 메인 스레드에서 실행될 수 없습니다"라는 제한이 연결((HttpURLConnection)url.openConnection())에만 국한되지 않고 전체 데이터 프로세스에 대한 제한이기 때문입니다.
따라서 권장되는 접근 방식은 전체 InputStream 구문 분석을 doInBackground에 배치한 다음 doInBackground의 비즈니스 로직을 준수하는 엔터티 클래스를 반환하는 것입니다.
高洛峰2017-04-17 17:38:35
파싱은 시간이 많이 걸리는 작업이므로 하위 스레드에 배치해야 합니다. onPostExecute
는 메인 스레드이고 doInBackground
은 하위 스레드입니다.
메인 스레드에서 시간이 많이 걸리는 작업을 수행했기 때문에 오류를 보고하는 것이 정상입니다.