Właściwe powiadomienie AsyncTaskLoader o zmianach danych z wątku tła
Chcę wdrożyćAsyncTaskLoader
dla mojego niestandardowego źródła danych:
public class DataSource {
public interface DataSourceObserver {
void onDataChanged();
}
...
}
DataSource
zachowa listę zarejestrowanych obserwatorów i powiadomi ich o zmianach.CustomLoader
wdrożyDataSourceObserver
. Pytanie brzmi, jak właściwie powiadomićCustomLoader
odLoader.onContentChanged()
musi być wywołany z wątku interfejsu użytkownika, ale w moim przypadkuDataSource
operacje (i połączenia doDataSourceObserver.onDataChanged()
) zostanie wykonane z wątków w tle.
Zaktualizowany pomysłem z końcówki Selvina:
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();
}
});
}
}