diff --git a/src/org/linphone/ContactsManager.java b/src/org/linphone/ContactsManager.java index bd3d457dc..525882dc1 100644 --- a/src/org/linphone/ContactsManager.java +++ b/src/org/linphone/ContactsManager.java @@ -55,6 +55,7 @@ public class ContactsManager extends ContentObserver { private boolean preferLinphoneContacts = false, isContactPresenceDisabled = true, hasContactAccess = false; private ContentResolver contentResolver; private Context context; + private ContactsFetchTask contactsFetchTask; private static ArrayList contactsUpdatedListeners; public static void addContactsListener(ContactsUpdatedListener listener) { @@ -78,6 +79,13 @@ public class ContactsManager extends ContentObserver { sipContacts = new ArrayList(); } + public void destroy() { + if (contactsFetchTask != null && !contactsFetchTask.isCancelled()) { + contactsFetchTask.cancel(true); + } + instance = null; + } + @Override public void onChange(boolean selfChange) { onChange(selfChange, null); @@ -213,7 +221,11 @@ public class ContactsManager extends ContentObserver { } public synchronized void fetchContactsAsync() { - new ContactsFetchTask().execute(); + if (contactsFetchTask != null && !contactsFetchTask.isCancelled()) { + contactsFetchTask.cancel(true); + } + contactsFetchTask = new ContactsFetchTask(); + contactsFetchTask.execute(); } diff --git a/src/org/linphone/LinphoneManager.java b/src/org/linphone/LinphoneManager.java index dd7699b61..d4534d5a3 100644 --- a/src/org/linphone/LinphoneManager.java +++ b/src/org/linphone/LinphoneManager.java @@ -805,6 +805,7 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag public static synchronized void destroy() { if (instance == null) return; + ContactsManager.getInstance().destroy(); getInstance().changeStatusToOffline(); sExited = true; instance.doDestroy();