55import android .content .res .Configuration ;
66import android .support .annotation .NonNull ;
77import 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