2012-06-11 2 views
0

이 질문은 스택 오버플로를 통한 이전 질문의 연속입니다. how-to-download-images-asynchronously-from-web-server. 블랙 베리에 비동기식 목록을 만들기 위해 고심하고 있습니다. 이제는 나를 위해 잘 작동합니다. 그러나 그것은 나에게 또 다른 문제를주고있다.Blackery의 비동기 목록 필드 구현 중에 IllegalThreadState 예외가 발생했습니다.

나는 지금까지

  1. 가 5 스레드 풀 크기를 제한
  2. 목록이
  3. RunnableFactory을 만든 기본 미리로드 된 XML 피드에서 값을 복용 목록보기를 만든 이렇게 한 무엇 그 다음에 실행 파일을 추가합니다. Runnable 객체는 서버에서 이미지를 다운로드 할 수 있습니다.
  4. 이제 목록은 완벽하게 비동기 적으로로드됩니다.

문제 시나리오 목록 화면는 RunnableFactory 다음 시작 다운로드를 초기화하고 목록에서 이미지를 렌더링로드에

. 하지만 목록에 50 개의 행이 있다고 가정 해 보겠습니다. 이제 10 개의 이미지가 성공적으로 다운로드되었으며 RunnableFactory는 여전히 작동 중입니다. 이 시점에서 뒤로 키를 누르고 다음을 클릭하십시오. 실질적으로 목록 화면에 와서 새로 다운로드 프로세스를 다시 시작해야합니다. 그러나이 문제가 모든 스레드가 실행되기 때문에

IllegalThredState 예외

내 가정을 던지고, 나는 누르면 다시 키에 모든 스레드를 취소해야 할 수도 있습니다. 이것이 문제라면 제게 어떻게 할 수 있는지 알려주십시오. 내가 여러 스레드를 작성 했으므로 어떻게 모든 스레드를 중지 한 다음 다시 탐색 할 수 있습니까?

이것은 더 복잡한 시스템처럼 보입니다. 아무도 내가이 문제에 대한 가능한 해결책이 무엇인지 이해할 수 있도록 도와 줄 수 있습니까?

답변

0

트레드 풀을 사용하는 경우 종료하면 다시 탐색 할 때 모든 밟음을 inturupt 수 있습니다.

+0

종료로 무엇을 의미합니까? 방해하는 방법? 나는 스레드를 익명의 내부 클래스로 채우고 있습니다. 그래서 어떻게 모든 스레드를 중단합니까. 나는 그들 모두에 대한 언급이 없다. –

+0

@Nilanchala,'RunnableFactory' 란 무엇입니까? 당신이 쓴'Runnables'를 만들기위한 공장입니까? 만약 그 소스를 가지고 있다면, 생성 한'Thread' 객체를 팩토리의 영구 멤버 변수로 저장하기 만하면됩니다. 그래서 나중에 그 객체에'Thread.interrupt()'를 호출 할 수 있습니다. – Nate

1

마침내 두 번째 스레드를 시작하려고 할 때 예외가 발생했습니다. 일단 시작되면 스레드를 다시 시작할 수 없습니다.

+0

. 해결 방법을 공유하십시오. –

+0

RunnableFactory의 코드를 공유 할 수 있습니까? 또는 어디에서 스레드를 시작합니까? –

관련 문제