Observable
来源:互联网 发布:ncbi sra数据怎么下载 编辑:程序博客网 时间:2024/05/04 06:04
public abstract class ReadingTask extends Observable {
private State state;
/**
* Construct a reading task .
*
*/
public ReadingTask() {
this.state = State.Prepared;
addObserver(new StateChangeObserver());
}
public abstract void doInBackground();
public void onPreExcuted() {
}
public void onPostExcuted() {
}
/**
* Return the task's state .
*
* @return task's state .
*/
public State getState() {
return state;
}
/**
* Remove the observers of the reading task , and clear all the state change
* listeners .
*/
public void clear() {
deleteObservers();
}
/**
* Set the task's state .
*
* @param state
* task's state .
*/
void setState(State state) {
this.state = state;
}
/**
* Start to do the task's action . If the task is to cancel the jni
* operation , its started state is set Canceled .
*/
void start() {
state = State.Started;
setChanged();
notifyObservers();
try {
doInBackground();
} catch (Exception e) {
state = State.Failed;
setChanged();
notifyObservers(e);
}
state = State.Finished;
setChanged();
notifyObservers();
}
/**
* Enum the state of the task , it contains Prepared , Started , Canceled ,
* Failed , Finished .
*
* @author zouyuefu
*/
public static enum State {
Prepared, Started, Canceled, Failed, Finished
}
/**
* An observer is used to notify the task when its state changed .
*
* @author zouyuefu
*/
private static class StateChangeObserver implements Observer {
public void update(Observable observable, Object data) {
if (observable instanceof ReadingTask) {
ReadingTask task = (ReadingTask) observable;
Log.d("debug", "state : " + task.getState()
+ " --return value:" + data);
if (task.state == State.Started) {
Message.obtain(ReadingWorker.getInstance().getHandler(),
ReadingWorker.MESSAGE_TASK_STARTED, task)
.sendToTarget();
} else if (task.state == State.Finished) {
Message.obtain(ReadingWorker.getInstance().getHandler(),
ReadingWorker.MESSAGE_TASK_FINISHED, task)
.sendToTarget();
}
}
}
}
}
这个例子的核心是为了写一个观察者,让前后的操作在主线程中进行进行(前后做state = State.Started;setChanged();notifyObservers();和state = State.Finished;setChanged();notifyObservers();这个的改变会影响StateChangeObserver ,然后StateChangeObserver 会通知handle,handle会做相应的处理),而doInBackground();是在背景线程中做事
- Observable
- Observable
- Observable
- observable
- Observable & Observer
- observable()方法
- AOP Observable
- Observable详解
- 新建一个Observable,返回observable对象
- Observable与Observer
- Observable(观测) 示例
- Observable与Observer
- Observable与Observer
- Observable与Observer
- Java Observable 模式
- Java Observable 模式
- Java Observable 模式
- About Observer & Observable
- php三级联动菜单
- 敏捷技巧:什么时候以什么方式来进行代码评审
- WinAPI: OffsetWindowOrgEx - 移动窗口坐标原点
- 迷茫中,好像丟失了自己
- 如何在android上支持JNA 实战步骤
- Observable
- Zen Cart模板修改常用文件说明
- GTK Gossip: 事件遮罩(Event Mask)
- Intel AVX 指令集对视频处理的影响
- Squid中的日志出现TCP_CLIENT_REFRESH_MISS的问题排除
- 使用Hibernate时,向数据库插入默认值的实现
- Adobe flex的平台差异
- [squid] 对大文件中的 range_offset_limit 和 quick_abort_min 的使用和多个回源的解决
- WPF依赖属性