From 047317735c039e8ca08331d364f9edc7ddb98fb7 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Fri, 18 Mar 2016 16:25:05 -0700 Subject: Deleting the unrestored widget id synchronously > We are making the DB call (IO) on the UI thread which is costlier than the AppWidgetHost call. > The process can get killed after the broadcast receiver returns, which can prevent these ids from getting deleted. Change-Id: I47746cf03d0eae573b6baa25cde9e573fd1f1a60 --- .../launcher3/AppWidgetsRestoredReceiver.java | 25 +++------------------- 1 file changed, 3 insertions(+), 22 deletions(-) (limited to 'src/com/android/launcher3/AppWidgetsRestoredReceiver.java') diff --git a/src/com/android/launcher3/AppWidgetsRestoredReceiver.java b/src/com/android/launcher3/AppWidgetsRestoredReceiver.java index 54ce0fd3c..c5b31046c 100644 --- a/src/com/android/launcher3/AppWidgetsRestoredReceiver.java +++ b/src/com/android/launcher3/AppWidgetsRestoredReceiver.java @@ -9,17 +9,13 @@ import android.content.ContentValues; import android.content.Context; import android.content.Intent; import android.database.Cursor; -import android.os.AsyncTask; import android.util.Log; import com.android.launcher3.LauncherSettings.Favorites; -import java.util.ArrayList; -import java.util.List; - public class AppWidgetsRestoredReceiver extends BroadcastReceiver { - private static final String TAG = "AppWidgetsRestoredReceiver"; + private static final String TAG = "AWRestoredReceiver"; @Override public void onReceive(Context context, Intent intent) { @@ -39,8 +35,8 @@ public class AppWidgetsRestoredReceiver extends BroadcastReceiver { */ static void restoreAppWidgetIds(Context context, int[] oldWidgetIds, int[] newWidgetIds) { final ContentResolver cr = context.getContentResolver(); - final List idsToRemove = new ArrayList(); final AppWidgetManager widgets = AppWidgetManager.getInstance(context); + AppWidgetHost appWidgetHost = new AppWidgetHost(context, Launcher.APPWIDGET_HOST_ID); for (int i = 0; i < oldWidgetIds.length; i++) { Log.i(TAG, "Widget state restore id " + oldWidgetIds[i] + " => " + newWidgetIds[i]); @@ -69,28 +65,13 @@ public class AppWidgetsRestoredReceiver extends BroadcastReceiver { try { if (!cursor.moveToFirst()) { // The widget no long exists. - idsToRemove.add(newWidgetIds[i]); + appWidgetHost.deleteAppWidgetId(newWidgetIds[i]); } } finally { cursor.close(); } } } - // Unregister the widget IDs which are not present on the workspace. This could happen - // when a widget place holder is removed from workspace, before this method is called. - if (!idsToRemove.isEmpty()) { - final AppWidgetHost appWidgetHost = - new AppWidgetHost(context, Launcher.APPWIDGET_HOST_ID); - new AsyncTask() { - public Void doInBackground(Void ... args) { - for (Integer id : idsToRemove) { - appWidgetHost.deleteAppWidgetId(id); - Log.e(TAG, "Widget no longer present, appWidgetId=" + id); - } - return null; - } - }.executeOnExecutor(Utilities.THREAD_POOL_EXECUTOR); - } LauncherAppState app = LauncherAppState.getInstanceNoCreate(); if (app != null) { -- cgit v1.2.3