Refine thread handling.
Remove mailboxes from the list synchronously and just do the network I/O and thread joins in the background. Change-Id: I2a339e5982c103b69f1212627f1cc98e98a8a068
This commit is contained in:
parent
c96099279b
commit
a0ef884d04
|
@ -510,14 +510,10 @@ public class ImapService extends Service {
|
|||
}
|
||||
}
|
||||
}
|
||||
stopIdlingForFolders(foldersToStop);
|
||||
stopIdlingForFoldersInBackground(foldersToStop);
|
||||
}
|
||||
|
||||
private void unregisterAllIdledMailboxes(final boolean disconnect) {
|
||||
// Run away from the UI thread
|
||||
sExecutor.execute(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
final ArrayList<ImapFolder> foldersToStop = new ArrayList<>();
|
||||
synchronized (mIdledFolders) {
|
||||
LogUtils.i(LOG_TAG, "Unregister all idle mailboxes");
|
||||
|
@ -533,12 +529,16 @@ public class ImapService extends Service {
|
|||
}
|
||||
mIdledFolders.clear();
|
||||
}
|
||||
stopIdlingForFolders(foldersToStop);
|
||||
}
|
||||
});
|
||||
stopIdlingForFoldersInBackground(foldersToStop);
|
||||
}
|
||||
|
||||
private void stopIdlingForFolders(final List<ImapFolder> folders) {
|
||||
private void stopIdlingForFoldersInBackground(final List<ImapFolder> folders) {
|
||||
if (folders.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
sExecutor.execute(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
for (ImapFolder folder : folders) {
|
||||
try {
|
||||
folder.stopIdling(true);
|
||||
|
@ -547,6 +547,8 @@ public class ImapService extends Service {
|
|||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private static class ImapEmailConnectivityManager extends EmailConnectivityManager {
|
||||
|
|
Loading…
Reference in New Issue