在以下简化组件存在的情况下,哪种设计模式比较智能:
3个组件:
- GUI
- 数据获取器
- 数据库
我无法访问互联网上的服务器,它只是一个数据源。互联网上的数据始终是更新的,本地数据库只是互联网上数据库的副本(缓存)。GUI 可以请求和更新本地缓存,类似服务的组件异步获取最新数据,这可能需要一些时间。 GUI 仅显示可以同步获取的本地数据库中的数据。
因此,我的问题是,您会使用哪些类来实现具有进度条功能的长期运行的服务?是否有更好的设计方法来解决这种“问题”?是否有更好的做法?
在以下简化组件存在的情况下,哪种设计模式比较智能:
3个组件:
- GUI
- 数据获取器
- 数据库
我无法访问互联网上的服务器,它只是一个数据源。互联网上的数据始终是更新的,本地数据库只是互联网上数据库的副本(缓存)。GUI 可以请求和更新本地缓存,类似服务的组件异步获取最新数据,这可能需要一些时间。 GUI 仅显示可以同步获取的本地数据库中的数据。
因此,我的问题是,您会使用哪些类来实现具有进度条功能的长期运行的服务?是否有更好的设计方法来解决这种“问题”?是否有更好的做法?
关于服务组件:
jobId
以指示正在后台处理的作业。jobId
获取状态。此服务的实现可以返回状态、完成百分比或任何其他相关信息,以告诉调用者更新过程的当前状态。此方法的实现需要能够报告增量进度(例如报告本地存储中的增量存储),以便制作准确的进度条;否则,UI最好只显示旋转的进度条。
AsyncTask
用法,在后台执行更新并在完成时向用户报告。如果此操作可能需要一段时间,则可以通过Android通知栏或推送通知实现更新的完成。onProgressUpdate
报告进度。 AsyncTask大致如下:
public class GetUpdateStatusAsyncTask extends AsyncTask {
protected Integer doInBackground(Integer... param) {
// this is the jobId that you get from the previous AsyncTask that you use to kick off the
// the update process
int jobId = param[0];
double percentCompleted = fetchStatus(jobId);
while(percentCompleted != 100.00) {
publishProgress(percentCompleted);
}
// return status code
return 1;
}
protected void onProgressUpdate(Double... progress) {
// set the progressBar here
}
protected void onPostExecute(Long result) {
// done, handle status code
}
private double fetchStatus(int jobId) {
double percentCompleted = 0.0;
// call interface to get the update based on the jobId
// return percentCompleted status or make a more complex object if you need
// more detail info
return percentCompleted;
}
}