Notificação adequada do AsyncTaskLoader sobre alterações de dados do encadeamento secundário
Eu quero implementarAsyncTaskLoader
para minha fonte de dados personalizada:
public class DataSource {
public interface DataSourceObserver {
void onDataChanged();
}
...
}
DataSource
manterá uma lista de observadores registrados e os notificará sobre mudanças.CustomLoader
vai implementarDataSourceObserver
. A questão é como notificar corretamenteCustomLoader
Desde aLoader.onContentChanged()
deve ser chamado de thread de interface do usuário, mas no meu casoDataSource
operações (e chamadas paraDataSourceObserver.onDataChanged()
) será feito a partir de threads de segundo plano.
Atualizado com ideia da ponta da Selvin:
public class CustomLoader extends AsyncTaskLoader<...> implements DataSource.DataSourceObserver {
private final Handler observerHandler;
public CustomLoader(Context context) {
super(context);
observerHandler = new Handler()
}
@Override
public void onDataChanged() {
observerHandler.post(new Runnable() {
@Override
public void run() {
onContentChanged();
}
});
}
}