From 60de3075dde2ff1903aa820a7f9110455e3091c7 Mon Sep 17 00:00:00 2001 From: Tsuyoshi Matsuzaki Date: Thu, 1 Jan 2015 21:29:47 +0000 Subject: [PATCH] Fix resource leak on onDestroy Starting from Android 5.0, IME processes can be alive even after Service.onDestory is called depending on the available memory so that we can switch IMEs as fast as possible. https://android.googlesource.com/platform/frameworks/base/+/f0f94d129b6eb3c48624e915898d86d4f2de59ff However, this change revealed that Mozc has not released all the Java objects on Service.onDestory, which can be observed as an increasing memory usage of Mozc. Closes Issue 265. BUG=Issue mozc:265 TEST=manually done with Nexus 5 / Android 5.0.1 (LRX22C) git-svn-id: https://mozc.googlecode.com/svn/trunk@474 a6090854-d499-a067-5803-1114d4e51264 --- .../android/inputmethod/japanese/MozcService.java | 15 ++++++++++++++- src/mozc_version_template.txt | 2 +- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/android/src/com/google/android/inputmethod/japanese/MozcService.java b/src/android/src/com/google/android/inputmethod/japanese/MozcService.java index 17439b030..c3a8c81f8 100644 --- a/src/android/src/com/google/android/inputmethod/japanese/MozcService.java +++ b/src/android/src/com/google/android/inputmethod/japanese/MozcService.java @@ -453,6 +453,12 @@ public boolean handleMessage(Message msg) { */ @SuppressLint("HandlerLeak") private class SendSyncDataCommandHandler extends Handler { + + /** + * "what" value of message. Always use this. + */ + static final int WHAT = 0; + /** * The current period of sending SYNC_DATA is 15 mins (as same as desktop version). */ @@ -648,6 +654,13 @@ public void onDestroy() { if (sessionExecutor != null) { sessionExecutor.syncData(); } + + // Following listeners/handlers have reference to the service. + // To free the service instance, remove the listeners/handlers. + sharedPreferences.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); + sendSyncDataCommandHandler.removeMessages(SendSyncDataCommandHandler.WHAT); + memoryTrimmingHandler.removeMessages(MemoryTrimmingHandler.WHAT); + super.onDestroy(); } @@ -676,7 +689,7 @@ void onCreateInternal(ViewEventListener eventListener, @Nullable ViewManagerInte // Start sending SYNC_DATA message to mozc server periodically. sendSyncDataCommandHandler.sendEmptyMessageDelayed( - 0, SendSyncDataCommandHandler.SYNC_DATA_COMMAND_PERIOD); + SendSyncDataCommandHandler.WHAT, SendSyncDataCommandHandler.SYNC_DATA_COMMAND_PERIOD); this.sharedPreferences = sharedPreferences; } diff --git a/src/mozc_version_template.txt b/src/mozc_version_template.txt index 66bf4ce2d..ba6be70e7 100644 --- a/src/mozc_version_template.txt +++ b/src/mozc_version_template.txt @@ -1,6 +1,6 @@ MAJOR=2 MINOR=16 -BUILD=2007 +BUILD=2008 REVISION=102 # NACL_DICTIONARY_VERSION is the target version of the system dictionary to be # downloaded by NaCl Mozc.