님 말씀처럼 할 수도 있지만 MainActivity에 AsyncTask 코드가 종속이 되기 때문에 별로 좋은 디자인은 아니라고 생각합니다.
그것보다는 콜백인터페이스를 사용하시는게 좋습니다. 아래 샘플 코드를 참고하세요.
//T, S, R 은 님이 어떤 타입의 데이터를 사용하시는지 모르기 때문에 Generic Type으로 대신했습니다.
//저 부분은 님이 쓰셔야할 데이터타입으로 바꾸시면 됩니다.
public class MyAsyncTask extends AsyncTask<T, S, R> {
private MyAsyncTaskListener listener;
public MyAsyncTask(MyAsyncTaskListener listener) {
this.listener = listener;
}
@Override
protected R doInBackground(T... params) {
//여기에서 서버의 API를 콜한다던가 하는 작업을 하시고
//R 타입의 데이터를 리턴해 주세요.
return null;
}
@Override
protected void onPostExecute(R result) {
if (listener != null) {
listener.doSomething(result);
}
}
public static interface MyAsyncTaskListener<T> {
public void doSomething(R result);
}
}
public class MainActivity extends Activity {
private void callMyAsyncTask() {
MyAsyncTask task = new MyAsyncTask(new MyAsyncTask.MyAsyncTaskListener(){
@Override
public void doSomething(R result) {
//여기서 result를 받아서 액티비티에서 필요한 처리(보통, 화면 업데이트)를 하시면 됩니다.
}
});
}
}