2012-03-23 3 views
3
에서 스레드를 삭제해야합니까

I 스레드에서 다음 함수 호출이 있습니다내가 안드로이드

 Thread Move = new Thread(){ 
      public void run() 
      { 
       while(ButtonDown){ 
        UpdateValues(); 
        try { 
         Thread.sleep(50); 
        } catch (InterruptedException e) { 
         e.printStackTrace(); 
        } 
       } 
      } 
     }; 
     Move.start(); 

이 때 잠시 루프 휴식을 스레드를 삭제 안드로이드, 아니면 어떤 방법으로 그것을 삭제해야 할 것인가를 ?

답변

2

스레드에서 돌아 왔을 때 본질적으로 스레드가 중지되었으므로 스레드를 삭제하기 위해 특정 작업을 수행 할 필요가 없습니다. 안드로이드에서 쓰레드를위한 좋은 유스 케이스는 아니라는 점에 유의하십시오. UI가 아닌 스레드에서 UI를 업데이트하는 경우 프레임 워크가 불만을 제기 할 가능성이 큽니다. 대신 AsyncTask에 대한 자습서를 읽고 해당 모델로 이동해야합니다. 이므로 UI를 업데이트 할 수 있습니다.

+0

UI를 변경하지 않고 lockcanvas를 사용하여 화면을 업데이트하는 다른 스레드에서 처리하는 좌표 값을 변경합니다. 그걸 할 수있는 좋은 방법인가요? – Araw

+0

물론, 스레드를 죽이는 데 아무 것도 할 필요가 없습니다. –

+0

자, 도와 줘서 고마워. +1 – Araw

2

두 가지 개념이 있습니다. 하나는 스레드 자체, 즉 프로세서에서 실행중인 것으로 스택 메모리가있는 것입니다. 다른 하나는 Thread 객체입니다. 기본적으로 스레드에 액세스하기위한 제어판입니다.

스레드에 스레드가 죽을 때 해제되는 스택 메모리가 있습니다 (run()가 완료되거나 예외가 발생 함). 그러나 Thread java 객체는 더 이상 참조가 없을 때까지 계속 남아 있습니다.

자, 당신이 가지고 가정 해 봅시다 :

this.myThread = new Thread(){ 
      public void run() 
      { 
       int[] takeUpSomeMemory = new int[10000]; 

       while(ButtonDown){ 
        UpdateValues(); 
        try { 
         Thread.sleep(50); 
        } catch (InterruptedException e) { 
         e.printStackTrace(); 
        } 
       } 
      } 
     }; 
this.myThread.start(); 

그래서 당신은 당신이 만들 Thread에 대한 참조를 보유하고 myThread 변수 인스턴스를 가지고있다. start 메서드가 호출되면 스레드가 호출되고 변수 takeUpSomeMemory에 대해 상당히 많은 메모리가 할당됩니다. 에 대한 메모리가 실행 완료 또는 예외 발생에 의해 종료되면 run() 메서드가 가비지 수집됩니다. this.myThread의 메모리는 instanceVariable이 nil로 설정되거나 둘러싸는 클래스의 객체가 가비지 수집 될 때까지 유지됩니다.

+0

좋은 설명에 감사드립니다. – Araw

관련 문제