Skip to content

Commit df23456

Browse files
committed
修复因为监听屏幕方向变化而导致的内存泄漏问题
1 parent 2909cee commit df23456

File tree

1 file changed

+14
-5
lines changed

1 file changed

+14
-5
lines changed

library/src/main/java/com/hjq/window/ScreenOrientationMonitor.java

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import android.content.res.Configuration;
66
import android.support.annotation.NonNull;
77
import android.support.annotation.Nullable;
8+
import java.lang.ref.Reference;
9+
import java.lang.ref.WeakReference;
810

911
/**
1012
* author : Android 轮子哥
@@ -19,7 +21,7 @@ final class ScreenOrientationMonitor implements ComponentCallbacks {
1921

2022
/** 屏幕旋转回调 */
2123
@Nullable
22-
private OnScreenOrientationCallback mCallback;
24+
private Reference<OnScreenOrientationCallback> mCallbackReference;
2325

2426
public ScreenOrientationMonitor(int screenOrientation) {
2527
mScreenOrientation = screenOrientation;
@@ -40,7 +42,7 @@ void registerCallback(@Nullable Context context, @Nullable OnScreenOrientationCa
4042
if (applicationContext != null) {
4143
applicationContext.registerComponentCallbacks(this);
4244
}
43-
mCallback = callback;
45+
mCallbackReference = new WeakReference<>(callback);
4446
}
4547

4648
/**
@@ -54,7 +56,10 @@ void unregisterCallback(@Nullable Context context) {
5456
if (applicationContext != null) {
5557
applicationContext.unregisterComponentCallbacks(this);
5658
}
57-
mCallback = null;
59+
if (mCallbackReference != null) {
60+
mCallbackReference.clear();
61+
}
62+
mCallbackReference = null;
5863
}
5964

6065
@Override
@@ -64,10 +69,14 @@ public void onConfigurationChanged(@NonNull Configuration newConfig) {
6469
}
6570
mScreenOrientation = newConfig.orientation;
6671

67-
if (mCallback == null) {
72+
if (mCallbackReference == null) {
6873
return;
6974
}
70-
mCallback.onScreenOrientationChange(mScreenOrientation);
75+
OnScreenOrientationCallback callback = mCallbackReference.get();
76+
if (callback == null) {
77+
return;
78+
}
79+
callback.onScreenOrientationChange(mScreenOrientation);
7180
}
7281

7382
@Override

0 commit comments

Comments
 (0)