我正在使用LoaderManager,onCreateLoader方法会创建一个新的CursorLoader。
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle data) {
return new CursorLoader(context, CONTENT_URI, PROJECTION,
null, null, null);
}
只有在onLoadFinished()中加载完成后,UI才会更新。 每次加载cusor时,我还需要进行一些数据库操作,比如构建一个新的排序索引。这不能异步完成,因为UI依赖于此。
有没有办法在加载器中进行这样的db操作?或者这个问题的最佳设计是什么?
答案 0 :(得分:0)
根据您的问题,您使用加载程序和内容提供程序从数据库加载数据
你也正在研究排序类型的东西,它可以改变数据库中项目的顺序......
所以,根据我在这种类型的应用程序中的经验建议的最佳方式在UI中执行此索引排序操作只有util用户离开屏幕...
所以,在你的片段覆盖 onStop 方法的活动中,根据排序优先级或数字更新数据库中的数据索引......
将数据更新到内容提供者后,只需通知URI进行更改..
希望我的观点对你很清楚..
答案 1 :(得分:0)
装载机专为优化数据库访问而设计。该操作不关心更新UI,因此不关心提供进度信息。虽然可以(并且我使用它松散),要从加载器更新UI,您应该避免这种情况,因为Loader是这项工作的错误工具。强制加载器提供进度信息将打破范式。只有在完成整个操作后,Loader才会返回。相反,如果要在执行查询时更新UI,则应使用AsyncTask。
如果您必须使用Loader,那么您可以在Update progressbar from AsyncTaskLoader?找到解决方法。但同样,从您的问题来看,看起来您对替代方案持开放态度,如果您需要更新,则使用AsyncTask,或者您可以坚持使用Java线程。