android 加载程序中的数据库操作
database operation in android loader
我正在使用 LoaderManager,onCreateLoader 方法创建了一个新的 CursorLoader。
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle data) {
return new CursorLoader(context, CONTENT_URI, PROJECTION,
null, null, null);
}
只有在 onLoadFinished() 中完成加载后,UI 才会更新。
每次我加载游标时,我还需要做一些数据库操作,比如建立一个新的排序索引。这不能异步完成,因为 UI 依赖于此。
有没有办法在加载器中进行这样的数据库操作?或者这个问题的最佳设计是什么?
根据您的问题,您正在使用加载程序和内容提供程序从数据库中加载数据
您还在研究排序事物类型,它可以改变数据库中项目的顺序...
因此,根据我在此类应用程序中的经验,我建议最好的方法是在 UI 中执行此索引排序操作,仅当用户离开屏幕时...
因此,在您 activity 的片段中覆盖 onStop 方法并根据排序优先级或数字更新数据库中的数据索引...
并且在将数据更新到内容提供者之后,只需通知 URI 进行更改。
希望你明白我的意思..
加载器是专门为优化数据库访问而设计的。此操作不关心更新 UI,因此没有兴趣提供进度信息。虽然可以(并且我不严格地使用它)从加载程序更新 UI,但您应该避免这种情况,因为加载程序对于这项工作来说是错误的工具。强制 Loader 提供进度信息会打破范式。只有在整个操作完成后,Loader 才被期望 return。相反,如果您想在查询时更新 UI,那么您应该使用 AsyncTask。
如果您必须使用加载程序,那么您可以在 Update progressbar from AsyncTaskLoader? 找到解决方法。但同样,从你的问题来看,你似乎对替代方案持开放态度,如果你需要更新,请使用 AsyncTask,或者你可以坚持使用 Java 个线程。
我正在使用 LoaderManager,onCreateLoader 方法创建了一个新的 CursorLoader。
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle data) {
return new CursorLoader(context, CONTENT_URI, PROJECTION,
null, null, null);
}
只有在 onLoadFinished() 中完成加载后,UI 才会更新。 每次我加载游标时,我还需要做一些数据库操作,比如建立一个新的排序索引。这不能异步完成,因为 UI 依赖于此。
有没有办法在加载器中进行这样的数据库操作?或者这个问题的最佳设计是什么?
根据您的问题,您正在使用加载程序和内容提供程序从数据库中加载数据
您还在研究排序事物类型,它可以改变数据库中项目的顺序...
因此,根据我在此类应用程序中的经验,我建议最好的方法是在 UI 中执行此索引排序操作,仅当用户离开屏幕时...
因此,在您 activity 的片段中覆盖 onStop 方法并根据排序优先级或数字更新数据库中的数据索引...
并且在将数据更新到内容提供者之后,只需通知 URI 进行更改。
希望你明白我的意思..
加载器是专门为优化数据库访问而设计的。此操作不关心更新 UI,因此没有兴趣提供进度信息。虽然可以(并且我不严格地使用它)从加载程序更新 UI,但您应该避免这种情况,因为加载程序对于这项工作来说是错误的工具。强制 Loader 提供进度信息会打破范式。只有在整个操作完成后,Loader 才被期望 return。相反,如果您想在查询时更新 UI,那么您应该使用 AsyncTask。
如果您必须使用加载程序,那么您可以在 Update progressbar from AsyncTaskLoader? 找到解决方法。但同样,从你的问题来看,你似乎对替代方案持开放态度,如果你需要更新,请使用 AsyncTask,或者你可以坚持使用 Java 个线程。