2013-06-28 1 views
0

버튼이 있습니다. 켜기를 클릭하면 알고리즘이 작동하기 시작합니다 (약 10 초 작동).Android 기본 스레드 클릭 이벤트 응답이 없습니다

알고리즘이 다른 스레드에서 작동하고 있습니다 (기본에서는 작동하지 않음). 끄기 버튼을 사용하여 알고리즘을 중지하고 싶지만 클릭 이벤트를 처리하지 못합니다 ...

하지만 이상한 것이 있습니다.

내가 켜져있을 때 이런 종류의 코드 블록을 사용할 때 괜찮습니다. 에서

AsynTask.cancel(true); 

: 버튼으로 눌렀을 때

이 작업을 취소

while(true){ 
        //do something 
} 

내 알고리즘은 다음과 같은 작업을 수행 할 수 있습니다이

myObj.startAlg(); 
+2

그것에 대해 아무 말도하지 않는 것은 귀하의 코드가 너무 적습니다. 버튼 클릭이 발동되는 위치와 발포하는 위치와 관련된 부분을 더 게시하십시오. – Opiatefuchs

+0

while 루프에서 Thread.sleep()을 사용합니까? –

답변

0

같은 것입니다 AsyncClass는 다음과 같이 if(isCancelled()) 부분을 추가합니다. protected Long doIn 배경 (URL ... URL을) {

  for (int i = 0; i < count; i++) { 
      // you need to break your loop on particular condition here 

      if(isCancelled()) 
        break;  
      /*Put this in the doInBackgound() for the purpose*/ 
     } 
     return totalSize; 
    } 

편집 :

그리고 더 많은 정보를 AsyncTask를의 문서를 형성 추가 :

태스크는 언제든지 취소 할 수 있습니다

cancel (boolean)를 호출합니다. 이 메소드를 호출하면 (자), isCancelled()를 호출 해 가 true가 돌려 주어집니다. 이 메서드를 호출 한 후 onCancelled (Object) 대신 doInBackground (Object [])가 반환 된 후에 onPostExecute (Object)의 이 호출됩니다. 작업이 가능한 한 빨리 을 취소되도록하려면, 당신은 항상 doInBackground에서 주기적으로) 의 isCancelled (의 반환 값을 확인해야합니다 ([] 객체)의 경우 (예를 들어 루프 내부.) 수

+0

클릭 한 이벤트를 처리 할 수 ​​없습니다! 작업을 취소하려면 어떻게해야합니까? –

+0

그 버튼에'OnClickListener'를 두거나'android : onClick = "startCancelAsyncTask"'XML에 넣을 수는 없습니까? 그 'startCancelAsyncTask()'함수는 void 타입이어야하고 그 안에 click 이벤트를 처리 할 수 ​​있어야합니다. – g00dy

+0

xml에 있습니다 ... 하지만 응답이 없습니다 –

관련 문제