AsyncTask를 이용하여 화면에 ProgressDialog를 띄우고 작업을 종료 하는것 까지는 잘 됩니다.
그런데 액티비티를 빠져나왔을 경우 AsyncTask를 완전히 종료하고 싶은데 DDMS의 Threads를 확인해보면
상태가 wait로만 되어 있고, 사라지지 않더군요,
일반적인 Thread로 작업 할 경우 일반 thread는 사라지는데 말이죠
혹시 AsyncTask를 종료 하시는법 아시는분 있으시면 작은 가르침 바랍니다
현재 저의 코드는 아래와 같이 되어 있습니다.
private class MyAsyncTask extends AsyncTask<Void, Void, Void>
{
@Override protected void onPreExecute() { super.onPreExecute(); progressDialog = ProgressDialog.show(Memory.this, "Title", "Message", false, false); } @Override protected Void doInBackground(Void... arg0) { Log.e(TAG, "MountServiceTask"); myWork(); return null; } @Override protected void onPostExecute(Void result) { super.onPostExecute(result); progressDialog.dismiss(); progressDialog = null; }
}
@Override
protected void onDestroy() {
Log.e(TAG, "onDestroy");
if(myTask != null) { Log.e(TAG, "myTask is not null"); myTask .cancel(true); Log.e(TAG, "myTask isCanceled[" + myTask .isCancelled() + "] myTask .getStatus()[" + myTask .getStatus() + "]"); myTask = null; } else { Log.e(TAG, "myTask is Null"); }
}
AsyncTask 는 내부적으로 스레드 풀을 만들어놓고 동작하는 방식으로 구현되어 있습니다.
task 하나를 완료하면 해당 스레드는 스레드풀 내에서 대기하게 됩니다.
3.0 이상인 경우 executeOnExecutor 메소드를 사용하면 스레드에 대한 제어도 가능합니다만,
하위버전에서는 스레드를 직접 제어할 방법은 없을 겁니다.