Skip to content

Commit a0fe222

Browse files
authored
[shared_preferences] Don't create additional Handler when method channel is called. (flutter#3639)
1 parent c1c4514 commit a0fe222

File tree

4 files changed

+16
-4
lines changed

4 files changed

+16
-4
lines changed

packages/shared_preferences/shared_preferences/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 2.0.3
2+
3+
* Android: don't create additional Handler when method channel is called.
4+
15
## 2.0.2
26

37
* Don't create additional thread pools when method channel is called.

packages/shared_preferences/shared_preferences/android/src/main/java/io/flutter/plugins/sharedpreferences/MethodCallHandlerImpl.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ class MethodCallHandlerImpl implements MethodChannel.MethodCallHandler {
4444
private final android.content.SharedPreferences preferences;
4545

4646
private final ExecutorService executor;
47+
private final Handler handler;
4748

4849
/**
4950
* Constructs a {@link MethodCallHandlerImpl} instance. Creates a {@link
@@ -53,6 +54,7 @@ class MethodCallHandlerImpl implements MethodChannel.MethodCallHandler {
5354
preferences = context.getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
5455
executor =
5556
new ThreadPoolExecutor(0, 1, 30L, TimeUnit.SECONDS, new SynchronousQueue<Runnable>());
57+
handler = new Handler(Looper.getMainLooper());
5658
}
5759

5860
@Override
@@ -125,10 +127,13 @@ public void onMethodCall(MethodCall call, MethodChannel.Result result) {
125127
}
126128
}
127129

130+
public void teardown() {
131+
handler.removeCallbacksAndMessages(null);
132+
executor.shutdown();
133+
}
134+
128135
private void commitAsync(
129136
final SharedPreferences.Editor editor, final MethodChannel.Result result) {
130-
final Handler handler = new Handler(Looper.getMainLooper());
131-
132137
executor.execute(
133138
new Runnable() {
134139
@Override

packages/shared_preferences/shared_preferences/android/src/main/java/io/flutter/plugins/sharedpreferences/SharedPreferencesPlugin.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
public class SharedPreferencesPlugin implements FlutterPlugin {
1414
private static final String CHANNEL_NAME = "plugins.flutter.io/shared_preferences";
1515
private MethodChannel channel;
16+
private MethodCallHandlerImpl handler;
1617

1718
@SuppressWarnings("deprecation")
1819
public static void registerWith(io.flutter.plugin.common.PluginRegistry.Registrar registrar) {
@@ -32,11 +33,13 @@ public void onDetachedFromEngine(FlutterPlugin.FlutterPluginBinding binding) {
3233

3334
private void setupChannel(BinaryMessenger messenger, Context context) {
3435
channel = new MethodChannel(messenger, CHANNEL_NAME);
35-
MethodCallHandlerImpl handler = new MethodCallHandlerImpl(context);
36+
handler = new MethodCallHandlerImpl(context);
3637
channel.setMethodCallHandler(handler);
3738
}
3839

3940
private void teardownChannel() {
41+
handler.teardown();
42+
handler = null;
4043
channel.setMethodCallHandler(null);
4144
channel = null;
4245
}

packages/shared_preferences/shared_preferences/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: shared_preferences
22
description: Flutter plugin for reading and writing simple key-value pairs.
33
Wraps NSUserDefaults on iOS and SharedPreferences on Android.
44
homepage: https://github.com/flutter/plugins/tree/master/packages/shared_preferences/shared_preferences
5-
version: 2.0.2
5+
version: 2.0.3
66

77
flutter:
88
plugin:

0 commit comments

Comments
 (0)