32
32
33
33
import java .io .IOException ;
34
34
import java .io .InputStream ;
35
- import java .lang .ref .WeakReference ;
36
35
import java .net .URI ;
37
36
38
37
/**
@@ -92,7 +91,7 @@ public abstract class AsyncHttpResponseHandler implements ResponseHandlerInterfa
92
91
93
92
protected static final int BUFFER_SIZE = 4096 ;
94
93
95
- private Handler handler ;
94
+ private final Handler handler ;
96
95
public static final String DEFAULT_CHARSET = "UTF-8" ;
97
96
private String responseCharset = DEFAULT_CHARSET ;
98
97
private Boolean useSynchronousMode = false ;
@@ -121,21 +120,18 @@ public void setRequestHeaders(Header[] requestHeaders) {
121
120
}
122
121
123
122
/**
124
- * Avoid leaks by using a non-anonymous handler class with a weak reference
123
+ * Avoid leaks by using a non-anonymous handler class
125
124
*/
126
- static class ResponderHandler extends Handler {
127
- private final WeakReference < AsyncHttpResponseHandler > mResponder ;
125
+ private static class ResponderHandler extends Handler {
126
+ private final AsyncHttpResponseHandler mResponder ;
128
127
129
- ResponderHandler (AsyncHttpResponseHandler service ) {
130
- mResponder = new WeakReference < AsyncHttpResponseHandler >( service ) ;
128
+ ResponderHandler (AsyncHttpResponseHandler mResponder ) {
129
+ this . mResponder = mResponder ;
131
130
}
132
131
133
132
@ Override
134
133
public void handleMessage (Message msg ) {
135
- AsyncHttpResponseHandler service = mResponder .get ();
136
- if (null != service ) {
137
- service .handleMessage (msg );
138
- }
134
+ mResponder .handleMessage (msg );
139
135
}
140
136
}
141
137
@@ -167,6 +163,9 @@ public String getCharset() {
167
163
* Creates a new AsyncHttpResponseHandler
168
164
*/
169
165
public AsyncHttpResponseHandler () {
166
+ // There is always a handler ready for delivering messages.
167
+ handler = new ResponderHandler (this );
168
+
170
169
// Init Looper by calling postRunnable without argument
171
170
postRunnable (null );
172
171
}
@@ -307,7 +306,7 @@ protected void handleMessage(Message message) {
307
306
}
308
307
309
308
protected void sendMessage (Message msg ) {
310
- if (getUseSynchronousMode () || handler == null ) {
309
+ if (getUseSynchronousMode ()) {
311
310
handleMessage (msg );
312
311
} else if (!Thread .currentThread ().isInterrupted ()) { // do not send messages if request has been cancelled
313
312
handler .sendMessage (msg );
@@ -324,9 +323,6 @@ protected void postRunnable(Runnable runnable) {
324
323
if (missingLooper ) {
325
324
Looper .prepare ();
326
325
}
327
- if (null == handler ) {
328
- handler = new ResponderHandler (this );
329
- }
330
326
if (null != runnable ) {
331
327
handler .post (runnable );
332
328
}
@@ -343,17 +339,7 @@ protected void postRunnable(Runnable runnable) {
343
339
* @return Message instance, should not be null
344
340
*/
345
341
protected Message obtainMessage (int responseMessageId , Object responseMessageData ) {
346
- Message msg ;
347
- if (handler != null ) {
348
- msg = handler .obtainMessage (responseMessageId , responseMessageData );
349
- } else {
350
- msg = Message .obtain ();
351
- if (msg != null ) {
352
- msg .what = responseMessageId ;
353
- msg .obj = responseMessageData ;
354
- }
355
- }
356
- return msg ;
342
+ return handler .obtainMessage (responseMessageId , responseMessageData );
357
343
}
358
344
359
345
@ Override
0 commit comments