Мои AsyncTask
всегда живут в отдельном пакете, но все еще привязаны к определенному типу Activity
. Они принимают его экземпляр в конструкторе и сохраняют в локальной переменной.
Попробуйте думать с точки зрения создания абстрактного Activity
класса, который инкапсулирует AsyncTask
связанный материал и расширяется другими действиями.
Вот так:
public abstract RemoteListActivity<T> extends ListActivity{
// calls AsyncTask, shows spinning progress dialog, etc
protected abstract T someConcreteMethod();
}
public final class CustomerListActivity extends RemoteListActivity<Customer>{
protected final Customer someConcreteMethod();
}
В качестве альтернативы, если вещи не вписываются в одну иерархию, есть интерфейс:
interface LazyLoadable {
void setLoadingState();
void setDefaultState();
}
public class MyActivity extends Activity implements LazyLoadable{
}
public final class AsyncTask extends AsyncTask<Void, Void, Void>{
private final LazyLoadable lazyLoadable;
public MyAsyncTask(Context ctx, LazyLoadable lazyLoadable){
super(ctx);
this.lazyLoadable = lazyLoadable;
}
}