마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

async task 종료가 안됩니다....

0 추천
 btnstart.setOnClickListener(new View.OnClickListener(){
	       public void onClick(View v){
               started=true;
	    	   recordTask.execute();
	    	    try {
					Thread.sleep(100);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
	    	   startService(intent);
	       
	    	}});
      btnstop.setOnClickListener(new View.OnClickListener(){
    	       public void onClick(View v){ 
    	    	   stopService(intent);
    	    	   try {
   					Thread.sleep(100);
   				} catch (InterruptedException e) {
   					// TODO Auto-generated catch block
   					e.printStackTrace();
   				}
    	    	   recordTask.cancel(true);
    	    	   started=false;
    	    	 
    	    	  
    	       }
    	    	});

먼저 만들고있는 어플의 버튼입니다. 시작버튼을 누르면 boolean으로 선언한 변수 started가 true가되고 execute된후에 

서비스가 시작됩니다. 종료버튼을 누르면 서비스먼저 종료시키고 async를 종료시킨후에 started는 false가 되는데요.

처음 실행시 시작,종료 모두 잘됩니다. 그런데 한번시작하고 종료한 후에 또 시작을 하려면 에러가납니다.

java.lang.IllegalStateException: Cannot execute task: the task has already been executed (a task can be executed only once) 

에러 메세지 상으로는 이미 async가 돌아가고 있기 때문에 또 돌릴수 없다는 내용인 것 같은데 처음 종료버튼을 눌렀을때 제대로 종료시키려면 어떻게 해야하나요?

망디 (630 포인트) 님이 2013년 8월 18일 질문

1개의 답변

0 추천

Error 메시지가 뜻하는 바는 AsyncTask 인스턴스당 한번만 실행될 수 있다는 것입니다. recordTask.execute() 후에 같은 인스턴스를 다시 execute() 할 수 없습니다. 따라서 execute() 전에 항상 새로운 인스턴스를 만든 후에 실행하셔야 합니다.  

예)

recordTask = new RecordTask();
recordTask.execute();

 

꼬깜 (180 포인트) 님이 2013년 8월 18일 답변
...