我想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();
}
});
}
}