我想AsyncTaskLoader为我的自定义数据源实现:
public class DataSource {
public interface DataSourceObserver {
void onDataChanged();
}
...
}
DataSource将保留已注册观察员的名单,并将通知他们有关更改。CustomLoader将实施DataSourceObserver。问题是如何正确通知CustomLoader,因为Loader.onContentChanged()必须从 UI 线程调用,但在我的情况下,DataSource操作(和对 的调用DataSourceObserver.onDataChanged())将从后台线程完成。
更新了 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();
}
});
}
}