diff options
author | Danny Baumann <dannybaumann@web.de> | 2015-06-17 09:24:25 +0200 |
---|---|---|
committer | Danny Baumann <dannybaumann@web.de> | 2015-06-18 12:45:19 +0200 |
commit | 8fc4de470514194dcbcff382f2be68478910404c (patch) | |
tree | 8f47d911066a437cc303a0de2571284452631858 | |
parent | a2383f878fb2f2f98208fc957d0eb3deb0dc2ebd (diff) | |
download | android_packages_apps_Email-8fc4de470514194dcbcff382f2be68478910404c.tar.gz android_packages_apps_Email-8fc4de470514194dcbcff382f2be68478910404c.tar.bz2 android_packages_apps_Email-8fc4de470514194dcbcff382f2be68478910404c.zip |
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
-rw-r--r-- | provider_src/com/android/email/service/ImapService.java | 54 |
1 files changed, 28 insertions, 26 deletions
diff --git a/provider_src/com/android/email/service/ImapService.java b/provider_src/com/android/email/service/ImapService.java index 044a32593..779a5f679 100644 --- a/provider_src/com/android/email/service/ImapService.java +++ b/provider_src/com/android/email/service/ImapService.java @@ -509,43 +509,45 @@ public class ImapService extends Service { } } } - stopIdlingForFolders(foldersToStop); + stopIdlingForFoldersInBackground(foldersToStop); } private void unregisterAllIdledMailboxes(final boolean disconnect) { - // Run away from the UI thread + final ArrayList<ImapFolder> foldersToStop = new ArrayList<>(); + synchronized (mIdledFolders) { + LogUtils.i(LOG_TAG, "Unregister all idle mailboxes"); + + if (disconnect) { + int count = mIdledFolders.size(); + for (int i = 0; i < count; i++) { + ImapFolder folder = mIdledFolders.get(mIdledFolders.keyAt(i)); + if (folder != null && folder.isIdling()) { + foldersToStop.add(folder); + } + } + } + mIdledFolders.clear(); + } + stopIdlingForFoldersInBackground(foldersToStop); + } + + private void stopIdlingForFoldersInBackground(final List<ImapFolder> folders) { + if (folders.isEmpty()) { + return; + } sExecutor.execute(new Runnable() { @Override public void run() { - final ArrayList<ImapFolder> foldersToStop = new ArrayList<>(); - synchronized (mIdledFolders) { - LogUtils.i(LOG_TAG, "Unregister all idle mailboxes"); - - if (disconnect) { - int count = mIdledFolders.size(); - for (int i = 0; i < count; i++) { - ImapFolder folder = mIdledFolders.get(mIdledFolders.keyAt(i)); - if (folder != null && folder.isIdling()) { - foldersToStop.add(folder); - } - } + for (ImapFolder folder : folders) { + try { + folder.stopIdling(true); + } catch (MessagingException me) { + // ignored } - mIdledFolders.clear(); } - stopIdlingForFolders(foldersToStop); } }); } - - private void stopIdlingForFolders(final List<ImapFolder> folders) { - for (ImapFolder folder : folders) { - try { - folder.stopIdling(true); - } catch (MessagingException me) { - // ignored - } - } - } } private static class ImapEmailConnectivityManager extends EmailConnectivityManager { |