From 4894aa98280ba949204bdcbe5a051711739763fa Mon Sep 17 00:00:00 2001 From: Jochen Date: Tue, 3 Nov 2020 18:27:45 +0800 Subject: [PATCH 1/3] use executeOnExecutor instead of execute. --- .../MethodCallHandlerImpl.java | 30 ++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/packages/shared_preferences/shared_preferences/android/src/main/java/io/flutter/plugins/sharedpreferences/MethodCallHandlerImpl.java b/packages/shared_preferences/shared_preferences/android/src/main/java/io/flutter/plugins/sharedpreferences/MethodCallHandlerImpl.java index 33f2474592fa..2c3abee9dfe5 100644 --- a/packages/shared_preferences/shared_preferences/android/src/main/java/io/flutter/plugins/sharedpreferences/MethodCallHandlerImpl.java +++ b/packages/shared_preferences/shared_preferences/android/src/main/java/io/flutter/plugins/sharedpreferences/MethodCallHandlerImpl.java @@ -21,6 +21,12 @@ import java.util.List; import java.util.Map; import java.util.Set; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadFactory; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; /** * Implementation of the {@link MethodChannel.MethodCallHandler} for the plugin. It is also @@ -38,12 +44,34 @@ class MethodCallHandlerImpl implements MethodChannel.MethodCallHandler { private final android.content.SharedPreferences preferences; + private static final int CPU_COUNT = Runtime.getRuntime().availableProcessors(); + private static final int CORE_POOL_SIZE = Math.max(2, Math.min(CPU_COUNT - 1, 4)); + private static final int MAXIMUM_POOL_SIZE = CPU_COUNT * 2 + 1; + private static final int KEEP_ALIVE_SECONDS = 30; + + private final ThreadPoolExecutor threadPoolExecutor; + + private static final BlockingQueue sPoolWorkQueue = + new LinkedBlockingQueue(128); + + private static final ThreadFactory sThreadFactory = new ThreadFactory() { + private final AtomicInteger mCount = new AtomicInteger(1); + + public Thread newThread(Runnable r) { + return new Thread(r, "AsyncTask #" + mCount.getAndIncrement()); + } + }; + /** * Constructs a {@link MethodCallHandlerImpl} instance. Creates a {@link * android.content.SharedPreferences} based on the {@code context}. */ MethodCallHandlerImpl(Context context) { preferences = context.getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE); + threadPoolExecutor = new ThreadPoolExecutor( + CORE_POOL_SIZE, MAXIMUM_POOL_SIZE, KEEP_ALIVE_SECONDS, TimeUnit.SECONDS, + sPoolWorkQueue, sThreadFactory); + threadPoolExecutor.allowCoreThreadTimeOut(true); } @Override @@ -128,7 +156,7 @@ protected Boolean doInBackground(Void... voids) { protected void onPostExecute(Boolean value) { result.success(value); } - }.execute(); + }.executeOnExecutor(threadPoolExecutor); } private List decodeList(String encodedList) throws IOException { From 422d08c362bcb6f6d77d7cb8f6f32776b8b0cb34 Mon Sep 17 00:00:00 2001 From: Jochen Date: Wed, 4 Nov 2020 15:57:34 +0800 Subject: [PATCH 2/3] format --- .../MethodCallHandlerImpl.java | 26 ++++++++++++------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/packages/shared_preferences/shared_preferences/android/src/main/java/io/flutter/plugins/sharedpreferences/MethodCallHandlerImpl.java b/packages/shared_preferences/shared_preferences/android/src/main/java/io/flutter/plugins/sharedpreferences/MethodCallHandlerImpl.java index 2c3abee9dfe5..fd508bb350b0 100644 --- a/packages/shared_preferences/shared_preferences/android/src/main/java/io/flutter/plugins/sharedpreferences/MethodCallHandlerImpl.java +++ b/packages/shared_preferences/shared_preferences/android/src/main/java/io/flutter/plugins/sharedpreferences/MethodCallHandlerImpl.java @@ -52,15 +52,16 @@ class MethodCallHandlerImpl implements MethodChannel.MethodCallHandler { private final ThreadPoolExecutor threadPoolExecutor; private static final BlockingQueue sPoolWorkQueue = - new LinkedBlockingQueue(128); + new LinkedBlockingQueue(128); - private static final ThreadFactory sThreadFactory = new ThreadFactory() { - private final AtomicInteger mCount = new AtomicInteger(1); + private static final ThreadFactory sThreadFactory = + new ThreadFactory() { + private final AtomicInteger mCount = new AtomicInteger(1); - public Thread newThread(Runnable r) { - return new Thread(r, "AsyncTask #" + mCount.getAndIncrement()); - } - }; + public Thread newThread(Runnable r) { + return new Thread(r, "AsyncTask #" + mCount.getAndIncrement()); + } + }; /** * Constructs a {@link MethodCallHandlerImpl} instance. Creates a {@link @@ -68,9 +69,14 @@ public Thread newThread(Runnable r) { */ MethodCallHandlerImpl(Context context) { preferences = context.getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE); - threadPoolExecutor = new ThreadPoolExecutor( - CORE_POOL_SIZE, MAXIMUM_POOL_SIZE, KEEP_ALIVE_SECONDS, TimeUnit.SECONDS, - sPoolWorkQueue, sThreadFactory); + threadPoolExecutor = + new ThreadPoolExecutor( + CORE_POOL_SIZE, + MAXIMUM_POOL_SIZE, + KEEP_ALIVE_SECONDS, + TimeUnit.SECONDS, + sPoolWorkQueue, + sThreadFactory); threadPoolExecutor.allowCoreThreadTimeOut(true); } From 01dfe2e3d49d03b80ff862ad7f78db72ec390438 Mon Sep 17 00:00:00 2001 From: Jochen Date: Wed, 4 Nov 2020 17:49:11 +0800 Subject: [PATCH 3/3] format --- .../MethodCallHandlerImpl.java | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/packages/shared_preferences/shared_preferences/android/src/main/java/io/flutter/plugins/sharedpreferences/MethodCallHandlerImpl.java b/packages/shared_preferences/shared_preferences/android/src/main/java/io/flutter/plugins/sharedpreferences/MethodCallHandlerImpl.java index fd508bb350b0..0a5dcc0e5122 100644 --- a/packages/shared_preferences/shared_preferences/android/src/main/java/io/flutter/plugins/sharedpreferences/MethodCallHandlerImpl.java +++ b/packages/shared_preferences/shared_preferences/android/src/main/java/io/flutter/plugins/sharedpreferences/MethodCallHandlerImpl.java @@ -52,16 +52,16 @@ class MethodCallHandlerImpl implements MethodChannel.MethodCallHandler { private final ThreadPoolExecutor threadPoolExecutor; private static final BlockingQueue sPoolWorkQueue = - new LinkedBlockingQueue(128); + new LinkedBlockingQueue(128); - private static final ThreadFactory sThreadFactory = - new ThreadFactory() { - private final AtomicInteger mCount = new AtomicInteger(1); + private static final ThreadFactory sThreadFactory = + new ThreadFactory() { + private final AtomicInteger mCount = new AtomicInteger(1); - public Thread newThread(Runnable r) { - return new Thread(r, "AsyncTask #" + mCount.getAndIncrement()); - } - }; + public Thread newThread(Runnable r) { + return new Thread(r, "AsyncTask #" + mCount.getAndIncrement()); + } + }; /** * Constructs a {@link MethodCallHandlerImpl} instance. Creates a {@link @@ -69,14 +69,14 @@ public Thread newThread(Runnable r) { */ MethodCallHandlerImpl(Context context) { preferences = context.getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE); - threadPoolExecutor = - new ThreadPoolExecutor( - CORE_POOL_SIZE, - MAXIMUM_POOL_SIZE, - KEEP_ALIVE_SECONDS, - TimeUnit.SECONDS, - sPoolWorkQueue, - sThreadFactory); + threadPoolExecutor = + new ThreadPoolExecutor( + CORE_POOL_SIZE, + MAXIMUM_POOL_SIZE, + KEEP_ALIVE_SECONDS, + TimeUnit.SECONDS, + sPoolWorkQueue, + sThreadFactory); threadPoolExecutor.allowCoreThreadTimeOut(true); }