2010-11-19 4 views
2

스레드를 안전하게 중지하려면 어떻게해야합니까?어떻게 안전하게 안드로이드에서 스레드를 중지 하시겠습니까?

downloadThread = new Thread(new Runnable() { 

    @Override 
    public void run() { 

    }); 
    downloadThread.start(); 
} 
+0

... – dalle

+1

이이 같은 잦은 좋은 답변 자주 질문은 다음과 같습니다 ([어떻게 자바에서 빠르고 깨끗한 방법으로 스레드를 중단]에 http : // 유래. co.kr/questions/94011/how-to-abort-a-thread-in-a-fast-and-clean-in-java) –

답변

0

가장 쉬운 방법은 isRunning을 false로 설정하는 것입니다.

+0

일반적인 솔루션이 필요합니다. – Srinivas

+0

비슷한 해결책은 여러 번 고용 된 한 가지 방법입니다. while (do_run()) {do stuff} – dutt

3

Android sdk의 AsyncTask을 사용하는 경우 백그라운드 작업을 수행하는 대신 일반 스레드를 사용하여 cancel()을 찾을 수 있습니다.

+26

질문에 대답하지 않습니다. – Trevor

3

스레드를 인터럽트합니다. 스레드의 run() 메서드에서 다른 논리 블록의 끝에 isInterrupted() 값을 확인하십시오.

예를 들어, run() 방법은 네트워크 연결을 만들고, 이미지를 다운로드하고 이미지를 파일로 저장하는 세 가지 논리 단계로 나눌 수 있습니다. 이 단계가 끝나면 isCancelled()을 확인하고 그 시점에서 모든 상태를 삭제하는 작업을 중지합니다.

도 컴파일되지 않습니다
class NetworkFetcherTask extends AsyncTask<String, Void, Void>{ 
    public void doInBackground(String... params){ 
     String url = params[0]; 

     //Open connection if not cancelled 
     if(isCancelled()){ 
      conn.close(); 
      return; 
     } 
     NetworkConnection conn = new NetworkConnection(); 


     //Download the image if not cancelled 
     if(isCancelled()){ 
      conn.close(); 
      result.discard(); 
      return; 
     } 
     NetworkResult result = conn.fetchUrl(url); 
     conn.close(); 

     //Save the image to a file if not cancelled 
     if(isCancelled()){ 
      result.discard(); 
      return; 
     } 
     File file = new File(); 
     file.dump(result); 
    } 
} 
+0

Wohoo! 오래 된 질문! 실현하지 못했습니다 –

+0

몇 가지 예를 들어 줄 수 있습니까? –

+0

자, 자. isInterrupted()에서 isCancelled() 로의 변경 사항을 기록하십시오. isInterrupted()는 스레드의 메서드이며 AsyncTask는 아닙니다. 내 사과. –

관련 문제