AsyncTaskLoader
カスタム データ ソースに実装したい:
public class DataSource {
public interface DataSourceObserver {
void onDataChanged();
}
...
}
DataSource
登録されたオブザーバーのリストを保持し、変更について通知します。CustomLoader
を実施しDataSourceObserver
ます。問題は、UI スレッドから呼び出す必要があるため、適切に通知する方法ですが、私の場合、CustomLoader
操作(およびへの呼び出し) はバックグラウンド スレッドから行われます。Loader.onContentChanged()
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();
}
});
}
}