2012-01-09 2 views
4

사용자가 응용 프로그램에 로그인하는 데 사용되는 내 응용 프로그램에 ASyncTask의 인스턴스가 있습니다. 문제는 ASyncTask가 "onPostExecution"함수를 실행하면 ASyncTask 스레드 Eclipse Debugger에 표시된 것처럼 "실행 중"으로 유지됩니다. onPostExecution은 UI 구성 요소 만 수정하고 (성공적인 로그인의 경우) 새 활동을 시작합니다.안드로이드는 onPostExecution 후 ASyncTask 스레드를 종료하지 않습니다

어떻게 스레드를 종료 할 수 있습니까?

+0

이 더 많거나 적은을 [this post] (http://stackoverflow.com/questions/8407408/asynctask-keeps-waiting/8407518#8407518)의 사본. – kabuko

답변

1

스레드 종료가 필요한 특별한 이유가 있습니까? 일반적으로 시스템에서이 문제를 처리 할 수 ​​있지만 내 경험에 의하면 일단 AsyncTask 스레드를 사용하면 스레드는 다른 AsyncTask을 실행하기를 기다리고 있습니다.

+0

새로운 AsyncTask 개체를 사용하는 활동이 다양하므로이 스레드 스택이 만들어 지지만 대부분은 두 번 이상 사용되지 않습니다. –

+0

걱정하지 마십시오. 시스템이 정상적으로 작동하고 있습니다. 기존 스레드는 다른 스레드가 작성되지 않도록 메모리에 보유됩니다. (내 경험에 의하면 앱 당 3 개까지) 작업이 마무리되지만 다시 필요할 경우를 대비하여 안심하십시오. –

5

AsyncTask을 실행하는 경우 Android는 스레드 풀을 사용하므로 모든 Thread 개체가 자동으로 재활용됩니다. 그래서 스레드를 수동으로 죽일 필요가 없습니다. 당신이 asyncTask.execute(Params... params)를 호출 할 때 사용되는 ExecutorSERIAL_EXECUTORTHREAD_POOL_EXECUTOR, 인스턴스 :이 작업을 위해

AsyncTask에서 두 개의 정적 필드가

. 당신이 당신에게 ExecutorService 인스턴스를 제공하는 Executors.newSingleThreadExecutor()을 사용할 수 있습니다 - 예를 들어,

당신은 다른 Executor 인스턴스를 지정하는 다른 방법 asyncTask.executeOnExecutor(Executor exec, Params... params)을 사용할 수 있습니다 더 제어해야합니다. 이 방법으로 ExecutorService을 "종료"하여 모든 스레드를 확실하게 파괴하고 executor.shutdown() 메서드를 호출 할 수 있습니다. 프로젝트는 자바 응용 프로그램의 경우

+0

SERIAL_EXECUTOR 및 THREAD_POOL_EXECUTOR 필드와 executeOnExecutor() 메소드는 API 11+에서만 사용할 수 있습니다. 11 미만의 API 버전에 대한 해결 방법이 있습니까? – Ads

0

은 응용 프로그램

에서 실행중인 스레드를 확인하십시오

int active = Thread.activeCount(); 
System.out.println("currently active threads: "+active); 
Thread all[] = new Thread[active]; 
Thread.enumerate(all); 
for (int i = 0; i < active; i++) { 
    System.out.println(i + ": " + all[i]); 
} 

당신은 안드로이드 프로젝트의 응용 프로그램을 사용하여 r에있는 경우 :

String run=""; 
int active =Thread.activeCount(); 
System.out.println("currently active threads: " + active); 
Thread all[] = new Thread[active]; 
Thread.enumerate(all); 

for (int i = 0; i < active; i++) { 
    run+=all[i]+"\n"; 
} 
// declare the EditText in your main thread 
edittext.setText(run); 
관련 문제