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
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 17439b0..c3a8c81 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 @@
    */
   @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 @@
     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 @@
 
     // 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 66bf4ce..ba6be70 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.