Это дополнение к ответу Марека Себеры, он указал на использование обработчика. Чтобы сделать код простым и интуитивно понятным, используйте интерфейс. Это не чуждое понятие, мы все время используем его для функций обратного вызова (например, OnClickListner и т. Д.). Код будет выглядеть примерно так:
public class InnerTask extends AsyncTask<...>
{
interface ResultHandler
{
void gotResult(<> result);
}
private ResultHandler myResult;
//constructor
public InnerTask(....params...,ResultHandler callback)
{
...
this.myResult = callback;
}
protected void onPostExecute(<>result)
{
...
myResult.gotResult(result);
}
}
public class MyActivity extends Activity implements InnerTask.ResultHandler
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
//do something
//if you want the InnerTask to execute here
InnerTask i = new InnerTask(....params...,this); //send 'this' as parameter
i.execute();
}
@Override
public void gotResult(<> result)
{
//from onPostExecute
}
}
Если мы хотим использовать один и тот же класс AsynTask на нескольких сайтах, мы можем использовать этот тип реализации вместо использования реализации вложенных классов.