|
22 | 22 |
|
23 | 23 | private final AbsTask<ResultType> task;
|
24 | 24 | private final Executor executor;
|
| 25 | + private final Handler handler; |
25 | 26 | private volatile boolean callOnCanceled = false;
|
26 | 27 | private volatile boolean callOnFinished = false;
|
27 | 28 |
|
|
30 | 31 | this.task = task;
|
31 | 32 | this.task.setTaskProxy(this);
|
32 | 33 | this.setTaskProxy(null);
|
| 34 | + |
| 35 | + // set handler |
| 36 | + Looper looper = task.customLooper(); |
| 37 | + if (looper != null) { |
| 38 | + handler = new InternalHandler(looper); |
| 39 | + } else { |
| 40 | + handler = sHandler; |
| 41 | + } |
| 42 | + |
| 43 | + // set executor |
33 | 44 | Executor taskExecutor = task.getExecutor();
|
34 | 45 | if (taskExecutor == null) {
|
35 | 46 | taskExecutor = sDefaultExecutor;
|
@@ -85,42 +96,42 @@ public void run() {
|
85 | 96 | @Override
|
86 | 97 | protected void onWaiting() {
|
87 | 98 | this.setState(State.WAITING);
|
88 |
| - sHandler.obtainMessage(MSG_WHAT_ON_WAITING, this).sendToTarget(); |
| 99 | + handler.obtainMessage(MSG_WHAT_ON_WAITING, this).sendToTarget(); |
89 | 100 | }
|
90 | 101 |
|
91 | 102 | @Override
|
92 | 103 | protected void onStarted() {
|
93 | 104 | this.setState(State.STARTED);
|
94 |
| - sHandler.obtainMessage(MSG_WHAT_ON_START, this).sendToTarget(); |
| 105 | + handler.obtainMessage(MSG_WHAT_ON_START, this).sendToTarget(); |
95 | 106 | }
|
96 | 107 |
|
97 | 108 | @Override
|
98 | 109 | protected void onSuccess(ResultType result) {
|
99 | 110 | this.setState(State.SUCCESS);
|
100 |
| - sHandler.obtainMessage(MSG_WHAT_ON_SUCCESS, this).sendToTarget(); |
| 111 | + handler.obtainMessage(MSG_WHAT_ON_SUCCESS, this).sendToTarget(); |
101 | 112 | }
|
102 | 113 |
|
103 | 114 | @Override
|
104 | 115 | protected void onError(Throwable ex, boolean isCallbackError) {
|
105 | 116 | this.setState(State.ERROR);
|
106 |
| - sHandler.obtainMessage(MSG_WHAT_ON_ERROR, new ArgsObj(this, ex)).sendToTarget(); |
| 117 | + handler.obtainMessage(MSG_WHAT_ON_ERROR, new ArgsObj(this, ex)).sendToTarget(); |
107 | 118 | }
|
108 | 119 |
|
109 | 120 | @Override
|
110 | 121 | protected void onUpdate(int flag, Object... args) {
|
111 | 122 | // obtainMessage(int what, int arg1, int arg2, Object obj), arg2 not be used.
|
112 |
| - sHandler.obtainMessage(MSG_WHAT_ON_UPDATE, flag, flag, new ArgsObj(this, args)).sendToTarget(); |
| 123 | + handler.obtainMessage(MSG_WHAT_ON_UPDATE, flag, flag, new ArgsObj(this, args)).sendToTarget(); |
113 | 124 | }
|
114 | 125 |
|
115 | 126 | @Override
|
116 | 127 | protected void onCancelled(Callback.CancelledException cex) {
|
117 | 128 | this.setState(State.CANCELLED);
|
118 |
| - sHandler.obtainMessage(MSG_WHAT_ON_CANCEL, new ArgsObj(this, cex)).sendToTarget(); |
| 129 | + handler.obtainMessage(MSG_WHAT_ON_CANCEL, new ArgsObj(this, cex)).sendToTarget(); |
119 | 130 | }
|
120 | 131 |
|
121 | 132 | @Override
|
122 | 133 | protected void onFinished() {
|
123 |
| - sHandler.obtainMessage(MSG_WHAT_ON_FINISHED, this).sendToTarget(); |
| 134 | + handler.obtainMessage(MSG_WHAT_ON_FINISHED, this).sendToTarget(); |
124 | 135 | }
|
125 | 136 |
|
126 | 137 | @Override
|
@@ -165,6 +176,10 @@ private InternalHandler() {
|
165 | 176 | super(Looper.getMainLooper());
|
166 | 177 | }
|
167 | 178 |
|
| 179 | + private InternalHandler(Looper looper) { |
| 180 | + super(looper); |
| 181 | + } |
| 182 | + |
168 | 183 | @Override
|
169 | 184 | @SuppressWarnings("unchecked")
|
170 | 185 | public void handleMessage(Message msg) {
|
|
0 commit comments