diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 18e5b41..8186154 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -373,6 +373,7 @@
             mVoiceInput.destroy();
         }
         LatinImeLogger.commit();
+        LatinImeLogger.onDestroy();
         super.onDestroy();
     }
 
diff --git a/java/src/com/android/inputmethod/latin/LatinIMEUtil.java b/java/src/com/android/inputmethod/latin/LatinIMEUtil.java
index 962af47..838b4fe 100644
--- a/java/src/com/android/inputmethod/latin/LatinIMEUtil.java
+++ b/java/src/com/android/inputmethod/latin/LatinIMEUtil.java
@@ -16,10 +16,25 @@
 
 package com.android.inputmethod.latin;
 
+import android.os.AsyncTask;
 import android.text.format.DateUtils;
 import android.util.Log;
 
 public class LatinIMEUtil {
+
+    /**
+     * Cancel an {@link AsyncTask}.
+     *
+     * @param mayInterruptIfRunning <tt>true</tt> if the thread executing this
+     *        task should be interrupted; otherwise, in-progress tasks are allowed
+     *        to complete.
+     */
+    public static void cancelTask(AsyncTask<?, ?, ?> task, boolean mayInterruptIfRunning) {
+        if (task != null && task.getStatus() != AsyncTask.Status.FINISHED) {
+            task.cancel(mayInterruptIfRunning);
+        }
+    }
+
     public static class GCUtils {
         private static final String TAG = "GCUtils";
         public static final int GC_TRY_COUNT = 2;
diff --git a/java/src/com/android/inputmethod/latin/LatinImeLogger.java b/java/src/com/android/inputmethod/latin/LatinImeLogger.java
index 55e8598..1e467d9 100644
--- a/java/src/com/android/inputmethod/latin/LatinImeLogger.java
+++ b/java/src/com/android/inputmethod/latin/LatinImeLogger.java
@@ -20,6 +20,7 @@
 import android.content.SharedPreferences;
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager.NameNotFoundException;
+import android.os.AsyncTask;
 import android.os.DropBoxManager;
 import android.preference.PreferenceManager;
 import android.text.TextUtils;
@@ -88,6 +89,7 @@
 
     private Context mContext = null;
     private DropBoxManager mDropBox = null;
+    private AddTextToDropBoxTask mAddTextToDropBoxTask;
     private long mLastTimeActive;
     private long mLastTimeSend;
     private long mLastTimeCountEntry;
@@ -126,6 +128,29 @@
         }
     }
 
+    private class AddTextToDropBoxTask extends AsyncTask<Void, Void, Void> {
+        private final DropBoxManager mDropBox;
+        private final long mTime;
+        private final String mData;
+        public AddTextToDropBoxTask(DropBoxManager db, long time, String data) {
+            mDropBox = db;
+            mTime = time;
+            mData = data;
+        }
+        @Override
+        protected Void doInBackground(Void... params) {
+            if (sLOGPRINT) {
+                Log.d(TAG, "Commit log: " + mData);
+            }
+            mDropBox.addText(TAG, mData);
+            return null;
+        }
+        @Override
+        protected void onPostExecute(Void v) {
+            mLastTimeSend = mTime;
+        }
+    }
+
     private void initInternal(Context context) {
         mContext = context;
         mDropBox = (DropBoxManager) mContext.getSystemService(Context.DROPBOX_SERVICE);
@@ -169,6 +194,10 @@
         mRingCharBuffer.reset();
     }
 
+    public void destroy() {
+        LatinIMEUtil.cancelTask(mAddTextToDropBoxTask, false);
+    }
+
     /**
      * Check if the input string is safe as an entry or not.
      */
@@ -374,26 +403,25 @@
     }
 
     private void commitInternal() {
-        if (sLOGPRINT) {
-            Log.d(TAG, "Commit (" + mLogBuffer.size() + ")");
-        }
-        flushPrivacyLogSafely();
-        long now = System.currentTimeMillis();
-        addCountEntry(now);
-        addThemeIdEntry(now);
-        addLanguagesEntry(now);
-        addSettingsEntry(now);
-        addVersionNameEntry(now);
-        addSuggestionCountEntry(now);
-        String s = LogSerializer.createStringFromEntries(mLogBuffer);
-        if (!TextUtils.isEmpty(s)) {
+        // if there is no log entry in mLogBuffer, will not send logs to DropBox.
+        if (!mLogBuffer.isEmpty() && (mAddTextToDropBoxTask == null
+                || mAddTextToDropBoxTask.getStatus() == AsyncTask.Status.FINISHED)) {
             if (sLOGPRINT) {
-                Log.d(TAG, "Commit log: " + s);
+                Log.d(TAG, "Commit (" + mLogBuffer.size() + ")");
             }
-            mDropBox.addText(TAG, s);
+            flushPrivacyLogSafely();
+            long now = System.currentTimeMillis();
+            addCountEntry(now);
+            addThemeIdEntry(now);
+            addLanguagesEntry(now);
+            addSettingsEntry(now);
+            addVersionNameEntry(now);
+            addSuggestionCountEntry(now);
+            String s = LogSerializer.createStringFromEntries(mLogBuffer);
+            reset();
+            mAddTextToDropBoxTask = (AddTextToDropBoxTask) new AddTextToDropBoxTask(
+                    mDropBox, now, s).execute();
         }
-        reset();
-        mLastTimeSend = now;
     }
 
     private void commitInternalAndStopSelf() {
@@ -473,6 +501,11 @@
         }
     }
 
+    public static void onDestroy() {
+        sLatinImeLogger.commitInternal();
+        sLatinImeLogger.destroy();
+    }
+
     // TODO: Handle CharSequence instead of String
     public static void logOnManualSuggestion(String before, String after, int position
             , List<CharSequence> suggestions) {
