Skip to content

Commit 9a3047f

Browse files
authored
Merge pull request #1257 from rantianhua/master
fix: block complete messenger may execute in main thread
2 parents 77c787c + 43d19d6 commit 9a3047f

1 file changed

Lines changed: 24 additions & 8 deletions

File tree

library/src/main/java/com/liulishuo/filedownloader/FileDownloadMessageStation.java

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
@SuppressWarnings("WeakerAccess")
3333
public class FileDownloadMessageStation {
3434

35-
private final Executor blockCompletedPool = FileDownloadExecutors.
35+
private static final Executor BLOCK_COMPLETED_POOL = FileDownloadExecutors.
3636
newDefaultThreadPool(5, "BlockCompleted");
3737

3838
private final Handler handler;
@@ -63,13 +63,7 @@ void requestEnqueue(final IFileDownloadMessenger messenger,
6363
return;
6464
}
6565

66-
if (messenger.isBlockingCompleted()) {
67-
blockCompletedPool.execute(new Runnable() {
68-
@Override
69-
public void run() {
70-
messenger.handoverMessage();
71-
}
72-
});
66+
if (interceptBlockCompleteMessage(messenger)) {
7367
return;
7468
}
7569

@@ -102,6 +96,25 @@ private void handoverInUIThread(IFileDownloadMessenger messenger) {
10296
handler.sendMessage(handler.obtainMessage(HANDOVER_A_MESSENGER, messenger));
10397
}
10498

99+
/**
100+
* @param messenger {@link com.liulishuo.filedownloader.IFileDownloadMessenger}
101+
* @return true if the messenger is a block complete messenger and handle it through
102+
* {@linkplain FileDownloadMessageStation#BLOCK_COMPLETED_POOL} in the meantime.
103+
*/
104+
private static boolean interceptBlockCompleteMessage(final IFileDownloadMessenger messenger) {
105+
if (messenger.isBlockingCompleted()) {
106+
BLOCK_COMPLETED_POOL.execute(new Runnable() {
107+
@Override
108+
public void run() {
109+
messenger.handoverMessage();
110+
}
111+
});
112+
return true;
113+
} else {
114+
return false;
115+
}
116+
}
117+
105118
private final Object queueLock = new Object();
106119

107120
private void enqueue(final IFileDownloadMessenger messenger) {
@@ -166,6 +179,9 @@ public boolean handleMessage(Message msg) {
166179
private void dispose(final ArrayList<IFileDownloadMessenger> disposingList) {
167180
// dispose Sub-package-size each time.
168181
for (IFileDownloadMessenger iFileDownloadMessenger : disposingList) {
182+
if (interceptBlockCompleteMessage(iFileDownloadMessenger)) {
183+
continue;
184+
}
169185
iFileDownloadMessenger.handoverMessage();
170186
}
171187

0 commit comments

Comments
 (0)