需求描述
- 没有网络的时候,将操作产生的本地图片(拍照,也可能是其他文件),存储起来。有网络的时候传输到文件服务器。
- 文件服务器只支持一个文件一个文件的传输。
分析
- 因为文件上传的过程不依赖与界面,所以不考虑Activity开启子线程的方式,使用Service,并且App一开启就开启这个服务。
- 创建一个上传队列,每次队列有新的元素加入的时候就去通知Service上传队列改变
- 创建一个任务队列,每次一个上传任务执行完成后,改变任务状态然后通知Service任务状态改变
- Service负责维护这个需求主要逻辑。负责通维护通知栏状态变化,接收任务个数改变,任务状态改变的监听
流程逻辑图如下:

实现
demo

上传事件和事件队列
/** 上传任务 */
public class PhotoUpload {
public static final int STATE_UPLOAD_COMPLETED = 5;
public static final int STATE_UPLOAD_ERROR = 4;
public static final int STATE_UPLOAD_IN_PROGRESS = 3;
public static final int STATE_UPLOAD_WAITING = 2;
public static final int STATE_SELECTED = 1;
public static final int STATE_NONE = 0;
private int mState;
private String name;
public int getUploadState() {
return mState;
}
public void reset() {
mState = STATE_NONE;
}
public void setUploadState(final int state) {
if (mState != state) {
mState = state;
switch (state) {
case STATE_UPLOAD_ERROR:
case STATE_UPLOAD_COMPLETED:
EventBus.getDefault().post(new UploadsModifiedEvent());
break;
case STATE_SELECTED:
case STATE_UPLOAD_WAITING:
break;
}
notifyUploadStateListener();
}
}
private void notifyUploadStateListener() {
EventBus.getDefault().post(new