1

나는 안드로이드를 개발하는 것을 처음으로 좋아한다. 이미지를로드하고 imageView에서 새로 고치는 스레드를 만드는 활동이 있습니다. 스레드는 "무한 루프"를 실행합니다. 작업이 중지되면 스레드를 중지하고 싶습니다. 아래 예제에서는 구현 한 것을 볼 수 있지만 예외가 발생하고 스레드가 계속 작동하거나 응용 프로그램이 다운됩니다. 어떤 제안?안드로이드 쓰레드 인터럽트 (활동 파괴가 작동하지 않을 때)

public class myActivity extends Activity{ 

    Thread tr; 


    .... onCreate(){ 
     bla bla bla 

     tr = new Thread(); 
     tr.start(); 
    } 

    .....onDestroy(){ 
     tr.interupt(); 
    } 

    bla bla bla 
} 

전체 코드를 작성하지 않아서 불편을 끼쳐 드려 죄송합니다. 현재 코드가있는 곳은 집이 아닙니다. 내가 그걸 멈추게하려면 어떻게해야합니까?

나는 public static boolean을 설정하고 onDestroy를 false로 설정하는 또 다른 트릭을 시도했다.

스레드에서

에게 "무한 루프"wokrs 등 :

public static Boolean is = true; 

스레드 :

while (is == true).... 

들의 OnDestroy :

is = false; 

그래서,이 트릭, 루프 이후 스레드가 종료 될 때 스레드가 종료됩니까?

답변

3

run 메서드 실행이 끝나면 스레드가 종료됩니다. 따라서 booleanfalse으로 설정하여 while 루프를 중단 한 다음 컨트롤이 run의 끝에 도달하면 스레드가 반드시 완료됩니다. 이것은 실제로 java에서 스레드를 중지하는 데 권장되는 방법입니다.

public static volatile boolean is = true; 
0

첫 번째 방법으로 문제를 해결하지 마십시오.이 접근법은 Java 스레드 문서에서는 권장되지 않습니다. 두 번째 접근 방식은이 일을 수행하는 가장 좋은 방법입니다. 이제 두 번째 접근법에서 "on"변수를 onDestroy 메서드에서 false로 만들면 스레드의 while 루프가 즉시 중단됩니다. Now while this while loop 어떤 코드라도 작성했다면 실행을 계속할 것이고 일단 쓰레드 코드의 끝에 도달하면 쓰레드는 스스로 멈출 것이다.

+0

감사 남자 : 당신이 기억해야

한 가지 중요한 점은 항상 volatile 같은 다른 하나에 의해 하나 개의 스레드에 의해 수정 및 읽기 변수를 설정하는 코드를 깨는에서 변수 캐싱과 같은 최적화를 방지하는 것입니다. 그러나 두 번째 접근법을 사용할 수없는 경우가 있습니다. 어떻게 스레드를 멈출까요? – Panos

+1

항상 두 번째 방법을 사용해야한다고 생각합니다. 왜 당신은 첫 번째 접근 방식을 취하지 말았어야하는지에 대한보다 명확한 그림을 얻기 위해 스레드의 자바 문서를 살펴볼 수 있습니다. 그리고 나는 첫 번째 접근법으로하려고하는 모든 것이 무엇이든간에 두 번째 접근법으로도 수행 될 수 있다고 생각한다. –