Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 76db5c2

Browse files
committed
Strengthen handler references
1 parent 0f14ced commit 76db5c2

File tree

1 file changed

+12
-26
lines changed

1 file changed

+12
-26
lines changed

library/src/main/java/com/loopj/android/http/AsyncHttpResponseHandler.java

+12-26
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@
3232

3333
import java.io.IOException;
3434
import java.io.InputStream;
35-
import java.lang.ref.WeakReference;
3635
import java.net.URI;
3736

3837
/**
@@ -92,7 +91,7 @@ public abstract class AsyncHttpResponseHandler implements ResponseHandlerInterfa
9291

9392
protected static final int BUFFER_SIZE = 4096;
9493

95-
private Handler handler;
94+
private final Handler handler;
9695
public static final String DEFAULT_CHARSET = "UTF-8";
9796
private String responseCharset = DEFAULT_CHARSET;
9897
private Boolean useSynchronousMode = false;
@@ -121,21 +120,18 @@ public void setRequestHeaders(Header[] requestHeaders) {
121120
}
122121

123122
/**
124-
* Avoid leaks by using a non-anonymous handler class with a weak reference
123+
* Avoid leaks by using a non-anonymous handler class
125124
*/
126-
static class ResponderHandler extends Handler {
127-
private final WeakReference<AsyncHttpResponseHandler> mResponder;
125+
private static class ResponderHandler extends Handler {
126+
private final AsyncHttpResponseHandler mResponder;
128127

129-
ResponderHandler(AsyncHttpResponseHandler service) {
130-
mResponder = new WeakReference<AsyncHttpResponseHandler>(service);
128+
ResponderHandler(AsyncHttpResponseHandler mResponder) {
129+
this.mResponder = mResponder;
131130
}
132131

133132
@Override
134133
public void handleMessage(Message msg) {
135-
AsyncHttpResponseHandler service = mResponder.get();
136-
if (null != service) {
137-
service.handleMessage(msg);
138-
}
134+
mResponder.handleMessage(msg);
139135
}
140136
}
141137

@@ -167,6 +163,9 @@ public String getCharset() {
167163
* Creates a new AsyncHttpResponseHandler
168164
*/
169165
public AsyncHttpResponseHandler() {
166+
// There is always a handler ready for delivering messages.
167+
handler = new ResponderHandler(this);
168+
170169
// Init Looper by calling postRunnable without argument
171170
postRunnable(null);
172171
}
@@ -307,7 +306,7 @@ protected void handleMessage(Message message) {
307306
}
308307

309308
protected void sendMessage(Message msg) {
310-
if (getUseSynchronousMode() || handler == null) {
309+
if (getUseSynchronousMode()) {
311310
handleMessage(msg);
312311
} else if (!Thread.currentThread().isInterrupted()) { // do not send messages if request has been cancelled
313312
handler.sendMessage(msg);
@@ -324,9 +323,6 @@ protected void postRunnable(Runnable runnable) {
324323
if (missingLooper) {
325324
Looper.prepare();
326325
}
327-
if (null == handler) {
328-
handler = new ResponderHandler(this);
329-
}
330326
if (null != runnable) {
331327
handler.post(runnable);
332328
}
@@ -343,17 +339,7 @@ protected void postRunnable(Runnable runnable) {
343339
* @return Message instance, should not be null
344340
*/
345341
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);
357343
}
358344

359345
@Override

0 commit comments

Comments
 (0)