7

我对 LeakCanary 的行为感到有些困惑,我希望 SO 可以帮助我。我已将 LeakCanary 添加到我的应用程序中,并且我看到一个声称泄漏的弹出窗口。

这肯定看起来像这里提到的 InputMethodManager:https ://github.com/square/leakcanary/issues/322

看起来 LeakCanary 将其标记为已排除,但仍显示弹出窗口。有什么我不明白的吗?(如果有帮助,我可以包含我的排除代码,但是......)

这是泄漏活动的屏幕截图:

泄漏金丝雀屏幕截图

这是修剪后的 logcat 输出:

12-13 15:08:26.868 D/LeakCanary( 1642): In com.blueapron.blueapron.debug:0.0.0-123-g5c653b9-debug:135000.
12-13 15:08:26.868 D/LeakCanary( 1642): * EXCLUDED LEAK.
12-13 15:08:26.868 D/LeakCanary( 1642): * com.blueapron.mobile.ui.MainActivity has leaked:
12-13 15:08:26.868 D/LeakCanary( 1642): * GC ROOT android.view.inputmethod.InputMethodManager$ControlledInputConnectionWrapper.mParentInputMethodManager , matching exclusion any subclass of android.view.inputmethod.InputMethodManager$ControlledInputConnectionWrapper
12-13 15:08:26.869 D/LeakCanary( 1642): * references android.view.inputmethod.InputMethodManager.mNextServedView , matching exclusion field android.view.inputmethod.InputMethodManager#mNextServedView
12-13 15:08:26.869 D/LeakCanary( 1642): * references android.support.v7.widget.RecyclerView.mContext
12-13 15:08:26.869 D/LeakCanary( 1642): * leaks com.blueapron.mobile.ui.MainActivity instance
12-13 15:08:26.869 D/LeakCanary( 1642): * Retaining: 6.0 KB.
12-13 15:08:26.869 D/LeakCanary( 1642): * Reference Key: ecc9f4d2-78a2-4542-ae1e-abb4d4e358e4
12-13 15:08:26.869 D/LeakCanary( 1642): * Device: motorola google Nexus 6 shamu
12-13 15:08:26.869 D/LeakCanary( 1642): * Android Version: 6.0.1 API: 23 LeakCanary: 1.5 00f37f5
12-13 15:08:26.869 D/LeakCanary( 1642): * Durations: watch=5157ms, gc=176ms, heap dump=8016ms, analysis=63575ms
12-13 15:08:26.869 D/LeakCanary( 1642): * Details:
12-13 15:08:26.869 D/LeakCanary( 1642): * Instance of android.view.inputmethod.InputMethodManager$ControlledInputConnectionWrapper
12-13 15:08:26.869 D/LeakCanary( 1642): |   mActive = true
12-13 15:08:26.869 D/LeakCanary( 1642): |   mParentInputMethodManager = android.view.inputmethod.InputMethodManager@316308208 (0x12da7af0)
12-13 15:08:26.869 D/LeakCanary( 1642): |   mH = com.android.internal.view.IInputConnectionWrapper$MyHandler@319129568 (0x130587e0)
12-13 15:08:26.869 D/LeakCanary( 1642): |   mInputConnection = java.lang.ref.WeakReference@319129600 (0x13058800)
12-13 15:08:26.869 D/LeakCanary( 1642): |   mMainLooper = android.os.Looper@314581056 (0x12c02040)
12-13 15:08:26.869 D/LeakCanary( 1642): |   mDescriptor = java.lang.String@1873348736 (0x6fa90880)
12-13 15:08:26.869 D/LeakCanary( 1642): |   mObject = -1361251728
12-13 15:08:26.869 D/LeakCanary( 1642): |   mOwner = android.view.inputmethod.InputMethodManager$ControlledInputConnectionWrapper@314574736 (0x12c00790)
12-13 15:08:26.869 D/LeakCanary( 1642): |   shadow$_klass_ = android.view.inputmethod.InputMethodManager$ControlledInputConnectionWrapper
12-13 15:08:26.869 D/LeakCanary( 1642): |   shadow$_monitor_ = 0
12-13 15:08:26.869 D/LeakCanary( 1642): * Instance of android.view.inputmethod.InputMethodManager
12-13 15:08:26.870 D/LeakCanary( 1642): |   static RESULT_UNCHANGED_HIDDEN = 1
12-13 15:08:26.870 D/LeakCanary( 1642): |   static MSG_SET_ACTIVE = 4
12-13 15:08:26.870 D/LeakCanary( 1642): |   static RESULT_HIDDEN = 3
12-13 15:08:26.870 D/LeakCanary( 1642): |   static REQUEST_UPDATE_CURSOR_ANCHOR_INFO_NONE = 0
12-13 15:08:26.870 D/LeakCanary( 1642): |   static sInstance = android.view.inputmethod.InputMethodManager@316308208 (0x12da7af0)
12-13 15:08:26.870 D/LeakCanary( 1642): |   static SHOW_FORCED = 2
12-13 15:08:26.870 D/LeakCanary( 1642): |   static DISPATCH_NOT_HANDLED = 0
12-13 15:08:26.870 D/LeakCanary( 1642): |   static HIDE_NOT_ALWAYS = 2
12-13 15:08:26.870 D/LeakCanary( 1642): |   static NOT_AN_ACTION_NOTIFICATION_SEQUENCE_NUMBER = -1
12-13 15:08:26.870 D/LeakCanary( 1642): |   static MSG_UNBIND = 3
12-13 15:08:26.870 D/LeakCanary( 1642): |   static CONTROL_WINDOW_FIRST = 4
12-13 15:08:26.870 D/LeakCanary( 1642): |   static CONTROL_START_INITIAL = 256
12-13 15:08:26.870 D/LeakCanary( 1642): |   static RESULT_UNCHANGED_SHOWN = 0
12-13 15:08:26.870 D/LeakCanary( 1642): |   static SHOW_IM_PICKER_MODE_AUTO = 0
12-13 15:08:26.870 D/LeakCanary( 1642): |   static SHOW_IMPLICIT = 1
12-13 15:08:26.870 D/LeakCanary( 1642): |   static CONTROL_WINDOW_VIEW_HAS_FOCUS = 1
12-13 15:08:26.870 D/LeakCanary( 1642): |   static MSG_DUMP = 1
12-13 15:08:26.870 D/LeakCanary( 1642): |   static TAG = java.lang.String@1873283504 (0x6fa809b0)
12-13 15:08:26.870 D/LeakCanary( 1642): |   static SHOW_IM_PICKER_MODE_EXCLUDE_AUXILIARY_SUBTYPES = 2
12-13 15:08:26.870 D/LeakCanary( 1642): |   static MSG_SEND_INPUT_EVENT = 5
12-13 15:08:26.870 D/LeakCanary( 1642): |   static INPUT_METHOD_NOT_RESPONDING_TIMEOUT = 2500
12-13 15:08:26.870 D/LeakCanary( 1642): |   static DEBUG = false
12-13 15:08:26.870 D/LeakCanary( 1642): |   static PENDING_EVENT_COUNTER = java.lang.String@1873337528 (0x6fa8dcb8)
12-13 15:08:26.870 D/LeakCanary( 1642): |   static RESULT_SHOWN = 2
12-13 15:08:26.871 D/LeakCanary( 1642): |   static DISPATCH_IN_PROGRESS = -1
12-13 15:08:26.871 D/LeakCanary( 1642): |   static MSG_FLUSH_INPUT_EVENT = 7
12-13 15:08:26.871 D/LeakCanary( 1642): |   static $staticOverhead = byte[264]@1876294145 (0x6fd5fa01)
12-13 15:08:26.871 D/LeakCanary( 1642): |   static CONTROL_WINDOW_IS_TEXT_EDITOR = 2
12-13 15:08:26.871 D/LeakCanary( 1642): |   static MSG_TIMEOUT_INPUT_EVENT = 6
12-13 15:08:26.871 D/LeakCanary( 1642): |   static MSG_BIND = 2
12-13 15:08:26.871 D/LeakCanary( 1642): |   static DISPATCH_HANDLED = 1
12-13 15:08:26.871 D/LeakCanary( 1642): |   static SHOW_IM_PICKER_MODE_INCLUDE_AUXILIARY_SUBTYPES = 1
12-13 15:08:26.871 D/LeakCanary( 1642): |   static MSG_SET_USER_ACTION_NOTIFICATION_SEQUENCE_NUMBER = 9
12-13 15:08:26.871 D/LeakCanary( 1642): |   static HIDE_IMPLICIT_ONLY = 1
12-13 15:08:26.871 D/LeakCanary( 1642): |   mActive = false
12-13 15:08:26.871 D/LeakCanary( 1642): |   mBindSequence = -1
12-13 15:08:26.871 D/LeakCanary( 1642): |   mClient = android.view.inputmethod.InputMethodManager$1@314583040 (0x12c02800)
12-13 15:08:26.871 D/LeakCanary( 1642): |   mCompletions = null
12-13 15:08:26.871 D/LeakCanary( 1642): |   mCurChannel = null
12-13 15:08:26.871 D/LeakCanary( 1642): |   mCurId = null
12-13 15:08:26.871 D/LeakCanary( 1642): |   mCurMethod = null
12-13 15:08:26.871 D/LeakCanary( 1642): |   mCurRootView = null
12-13 15:08:26.871 D/LeakCanary( 1642): |   mCurSender = null
12-13 15:08:26.871 D/LeakCanary( 1642): |   mCurrentTextBoxAttribute = null
12-13 15:08:26.871 D/LeakCanary( 1642): |   mCursorAnchorInfo = null
12-13 15:08:26.871 D/LeakCanary( 1642): |   mCursorCandEnd = 0
12-13 15:08:26.871 D/LeakCanary( 1642): |   mCursorCandStart = 0
12-13 15:08:26.871 D/LeakCanary( 1642): |   mCursorRect = android.graphics.Rect@316910368 (0x12e3ab20)
12-13 15:08:26.872 D/LeakCanary( 1642): |   mCursorSelEnd = 0
12-13 15:08:26.872 D/LeakCanary( 1642): |   mCursorSelStart = 0
12-13 15:08:26.872 D/LeakCanary( 1642): |   mDummyInputConnection = android.view.inputmethod.BaseInputConnection@316910400 (0x12e3ab40)
12-13 15:08:26.872 D/LeakCanary( 1642): |   mFullscreenMode = false
12-13 15:08:26.872 D/LeakCanary( 1642): |   mH = android.view.inputmethod.InputMethodManager$H@316910432 (0x12e3ab60)
12-13 15:08:26.872 D/LeakCanary( 1642): |   mHasBeenInactive = true
12-13 15:08:26.872 D/LeakCanary( 1642): |   mIInputContext = android.view.inputmethod.InputMethodManager$ControlledInputConnectionWrapper@314574736 (0x12c00790)
12-13 15:08:26.872 D/LeakCanary( 1642): |   mLastSentUserActionNotificationSequenceNumber = -1
12-13 15:08:26.872 D/LeakCanary( 1642): |   mMainLooper = android.os.Looper@314581056 (0x12c02040)
12-13 15:08:26.872 D/LeakCanary( 1642): |   mNextServedView = android.support.v7.widget.RecyclerView@316742656 (0x12e11c00)
12-13 15:08:26.872 D/LeakCanary( 1642): |   mNextUserActionNotificationSequenceNumber = 2
12-13 15:08:26.872 D/LeakCanary( 1642): |   mPendingEventPool = android.util.Pools$SimplePool@314580864 (0x12c01f80)
12-13 15:08:26.872 D/LeakCanary( 1642): |   mPendingEvents = android.util.SparseArray@316910464 (0x12e3ab80)
12-13 15:08:26.872 D/LeakCanary( 1642): |   mRequestUpdateCursorAnchorInfoMonitorMode = 0
12-13 15:08:26.872 D/LeakCanary( 1642): |   mServedConnecting = true
12-13 15:08:26.872 D/LeakCanary( 1642): |   mServedInputConnection = null
12-13 15:08:26.872 D/LeakCanary( 1642): |   mServedInputConnectionWrapper = null
12-13 15:08:26.872 D/LeakCanary( 1642): |   mServedView = android.support.v7.widget.RecyclerView@316742656 (0x12e11c00)
12-13 15:08:26.872 D/LeakCanary( 1642): |   mService = com.android.internal.view.IInputMethodManager$Stub$Proxy@314580880 (0x12c01f90)
12-13 15:08:26.872 D/LeakCanary( 1642): |   mTmpCursorRect = android.graphics.Rect@316910496 (0x12e3aba0)
12-13 15:08:26.872 D/LeakCanary( 1642): |   shadow$_klass_ = android.view.inputmethod.InputMethodManager
12-13 15:08:26.872 D/LeakCanary( 1642): |   shadow$_monitor_ = 0
12-13 15:08:26.872 D/LeakCanary( 1642): * Instance of android.support.v7.widget.RecyclerView
12-13 15:08:26.873 D/LeakCanary( 1642): |   static TRACE_CREATE_VIEW_TAG = java.lang.String@315184464 (0x12c95550)
12-13 15:08:26.873 D/LeakCanary( 1642): |   static TRACE_HANDLE_ADAPTER_UPDATES_TAG = java.lang.String@315097152 (0x12c80040)
12-13 15:08:26.873 D/LeakCanary( 1642): |   static HORIZONTAL = 0
12-13 15:08:26.873 D/LeakCanary( 1642): |   static SCROLL_STATE_IDLE = 0
12-13 15:08:26.873 D/LeakCanary( 1642): |   static MIN_PREFETCH_TIME_NANOS = 4000000
12-13 15:08:26.873 D/LeakCanary( 1642): |   static SCROLL_STATE_DRAGGING = 1
12-13 15:08:26.873 D/LeakCanary( 1642): |   static ALLOW_PREFETCHING = true
12-13 15:08:26.873 D/LeakCanary( 1642): |   static TRACE_BIND_VIEW_TAG = java.lang.String@314983472 (0x12c64430)
12-13 15:08:26.873 D/LeakCanary( 1642): |   static INVALID_TYPE = -1
12-13 15:08:26.873 D/LeakCanary( 1642): |   static TRACE_PREFETCH_TAG = java.lang.String@315109328 (0x12c82fd0)
12-13 15:08:26.873 D/LeakCanary( 1642): |   static TRACE_SCROLL_TAG = java.lang.String@315072864 (0x12c7a160)
12-13 15:08:26.873 D/LeakCanary( 1642): |   static SCROLL_STATE_SETTLING = 2
12-13 15:08:26.873 D/LeakCanary( 1642): |   static NESTED_SCROLLING_ATTRS = int[1]@318192048 (0x12f739b0)
12-13 15:08:26.873 D/LeakCanary( 1642): |   static sQuinticInterpolator = android.support.v7.widget.RecyclerView$3@317774352 (0x12f0da10)
12-13 15:08:26.873 D/LeakCanary( 1642): |   static POST_UPDATES_ON_ANIMATION = true
12-13 15:08:26.873 D/LeakCanary( 1642): |   static TRACE_ON_LAYOUT_TAG = java.lang.String@314774192 (0x12c312b0)
12-13 15:08:26.873 D/LeakCanary( 1642): |   static INVALID_POINTER = -1
12-13 15:08:26.873 D/LeakCanary( 1642): |   static FORCE_INVALIDATE_DISPLAY_LIST = false
12-13 15:08:26.873 D/LeakCanary( 1642): |   static ALLOW_SIZE_IN_UNSPECIFIED_SPEC = true
12-13 15:08:26.873 D/LeakCanary( 1642): |   static TAG = java.lang.String@314957392 (0x12c5de50)
12-13 15:08:26.873 D/LeakCanary( 1642): |   static DEBUG = false
12-13 15:08:26.873 D/LeakCanary( 1642): |   static VERTICAL = 1
12-13 15:08:26.873 D/LeakCanary( 1642): |   static CLIP_TO_PADDING_ATTR = int[1]@318192032 (0x12f739a0)
12-13 15:08:26.874 D/LeakCanary( 1642): |   static TRACE_ON_DATA_SET_CHANGE_LAYOUT_TAG = java.lang.String@315065344 (0x12c78400)
12-13 15:08:26.874 D/LeakCanary( 1642): |   static LAYOUT_MANAGER_CONSTRUCTOR_SIGNATURE = java.lang.Class[4]@318980224 (0x13034080)
12-13 15:08:26.874 D/LeakCanary( 1642): |   static $staticOverhead = byte[256]@316502017 (0x12dd7001)
12-13 15:08:26.874 D/LeakCanary( 1642): |   static TOUCH_SLOP_DEFAULT = 0
12-13 15:08:26.874 D/LeakCanary( 1642): |   static NO_POSITION = -1
12-13 15:08:26.874 D/LeakCanary( 1642): |   static sFrameIntervalNanos = 16666667
12-13 15:08:26.874 D/LeakCanary( 1642): |   static MAX_SCROLL_DURATION = 2000
12-13 15:08:26.874 D/LeakCanary( 1642): |   static TOUCH_SLOP_PAGING = 1
12-13 15:08:26.874 D/LeakCanary( 1642): |   static DISPATCH_TEMP_DETACH = false
12-13 15:08:26.874 D/LeakCanary( 1642): |   static NO_ID = -1
12-13 15:08:26.874 D/LeakCanary( 1642): |   mAccessibilityDelegate = android.support.v7.widget.RecyclerViewAccessibilityDelegate@316910560 (0x12e3abe0)
12-13 15:08:26.874 D/LeakCanary( 1642): |   mAccessibilityManager = android.view.accessibility.AccessibilityManager@316731600 (0x12e0f0d0)
12-13 15:08:26.874 D/LeakCanary( 1642): |   mActiveOnItemTouchListener = null
12-13 15:08:26.874 D/LeakCanary( 1642): |   mAdapter = com.blueapron.mobile.ui.adapters.RecipeOverviewAdapter@316910592 (0x12e3ac00)
12-13 15:08:26.874 D/LeakCanary( 1642): |   mAdapterHelper = android.support.v7.widget.AdapterHelper@316914752 (0x12e3bc40)
12-13 15:08:26.874 D/LeakCanary( 1642): |   mAdapterUpdateDuringMeasure = false
12-13 15:08:26.874 D/LeakCanary( 1642): |   mBottomGlow = null
12-13 15:08:26.874 D/LeakCanary( 1642): |   mChildDrawingOrderCallback = null
12-13 15:08:26.874 D/LeakCanary( 1642): |   mChildHelper = android.support.v7.widget.ChildHelper@316910624 (0x12e3ac20)
12-13 15:08:26.874 D/LeakCanary( 1642): |   mClipToPadding = true
12-13 15:08:26.874 D/LeakCanary( 1642): |   mDataSetHasChangedAfterLayout = false
12-13 15:08:26.874 D/LeakCanary( 1642): |   mDispatchScrollCounter = 0
12-13 15:08:26.875 D/LeakCanary( 1642): |   mEatRequestLayout = 0
12-13 15:08:26.875 D/LeakCanary( 1642): |   mEatenAccessibilityChangeFlags = 0
12-13 15:08:26.875 D/LeakCanary( 1642): |   mFirstLayoutComplete = true
12-13 15:08:26.875 D/LeakCanary( 1642): |   mHasFixedSize = false
12-13 15:08:26.875 D/LeakCanary( 1642): |   mIgnoreMotionEventTillDown = false
12-13 15:08:26.875 D/LeakCanary( 1642): |   mInitialTouchX = 346
12-13 15:08:26.875 D/LeakCanary( 1642): |   mInitialTouchY = 1293
12-13 15:08:26.875 D/LeakCanary( 1642): |   mIsAttached = false
12-13 15:08:26.875 D/LeakCanary( 1642): |   mItemAnimator = android.support.v7.widget.DefaultItemAnimator@315199296 (0x12c98f40)
12-13 15:08:26.875 D/LeakCanary( 1642): |   mItemAnimatorListener = android.support.v7.widget.RecyclerView$ItemAnimatorRestoreListener@314580896 (0x12c01fa0)
12-13 15:08:26.875 D/LeakCanary( 1642): |   mItemAnimatorRunner = android.support.v7.widget.RecyclerView$2@314580912 (0x12c01fb0)
12-13 15:08:26.875 D/LeakCanary( 1642): |   mItemDecorations = java.util.ArrayList@316910656 (0x12e3ac40)
12-13 15:08:26.875 D/LeakCanary( 1642): |   mItemsAddedOrRemoved = false
12-13 15:08:26.875 D/LeakCanary( 1642): |   mItemsChanged = false
12-13 15:08:26.875 D/LeakCanary( 1642): |   mLastTouchX = 346
12-13 15:08:26.875 D/LeakCanary( 1642): |   mLastTouchY = 1293
12-13 15:08:26.875 D/LeakCanary( 1642): |   mLayout = android.support.v7.widget.LinearLayoutManager@316926400 (0x12e3e9c0)
12-13 15:08:26.875 D/LeakCanary( 1642): |   mLayoutFrozen = false
12-13 15:08:26.875 D/LeakCanary( 1642): |   mLayoutOrScrollCounter = 0
12-13 15:08:26.875 D/LeakCanary( 1642): |   mLayoutRequestEaten = false
12-13 15:08:26.875 D/LeakCanary( 1642): |   mLeftGlow = null
12-13 15:08:26.875 D/LeakCanary( 1642): |   mMaxFlingVelocity = 28000
12-13 15:08:26.875 D/LeakCanary( 1642): |   mMinFlingVelocity = 175
12-13 15:08:26.876 D/LeakCanary( 1642): |   mMinMaxLayoutPositions = int[2]@316910688 (0x12e3ac60)
12-13 15:08:26.876 D/LeakCanary( 1642): |   mNestedOffsets = int[2]@316910720 (0x12e3ac80)
12-13 15:08:26.876 D/LeakCanary( 1642): |   mObserver = android.support.v7.widget.RecyclerView$RecyclerViewDataObserver@314580928 (0x12c01fc0)
12-13 15:08:26.876 D/LeakCanary( 1642): |   mOnChildAttachStateListeners = null
12-13 15:08:26.876 D/LeakCanary( 1642): |   mOnFlingListener = null
12-13 15:08:26.876 D/LeakCanary( 1642): |   mOnItemTouchListeners = java.util.ArrayList@316910752 (0x12e3aca0)
12-13 15:08:26.876 D/LeakCanary( 1642): |   mPendingAccessibilityImportanceChange = java.util.ArrayList@316910784 (0x12e3acc0)
12-13 15:08:26.876 D/LeakCanary( 1642): |   mPendingSavedState = null
12-13 15:08:26.876 D/LeakCanary( 1642): |   mPostedAnimatorRunner = false
12-13 15:08:26.876 D/LeakCanary( 1642): |   mPreserveFocusAfterLayout = true
12-13 15:08:26.876 D/LeakCanary( 1642): |   mRecycler = android.support.v7.widget.RecyclerView$Recycler@316914800 (0x12e3bc70)
12-13 15:08:26.876 D/LeakCanary( 1642): |   mRecyclerListener = null
12-13 15:08:26.876 D/LeakCanary( 1642): |   mRightGlow = null
12-13 15:08:26.876 D/LeakCanary( 1642): |   mScrollConsumed = int[2]@316910816 (0x12e3ace0)
12-13 15:08:26.876 D/LeakCanary( 1642): |   mScrollFactor = 1.4E-45
12-13 15:08:26.876 D/LeakCanary( 1642): |   mScrollListener = null
12-13 15:08:26.876 D/LeakCanary( 1642): |   mScrollListeners = null
12-13 15:08:26.876 D/LeakCanary( 1642): |   mScrollOffset = int[2]@316910848 (0x12e3ad00)
12-13 15:08:26.876 D/LeakCanary( 1642): |   mScrollPointerId = 0
12-13 15:08:26.876 D/LeakCanary( 1642): |   mScrollState = 0
12-13 15:08:26.876 D/LeakCanary( 1642): |   mScrollingChildHelper = android.support.v4.view.NestedScrollingChildHelper@316910880 (0x12e3ad20)
12-13 15:08:26.876 D/LeakCanary( 1642): |   mState = android.support.v7.widget.RecyclerView$State@316918016 (0x12e3c900)
12-13 15:08:26.876 D/LeakCanary( 1642): |   mTempRect = android.graphics.Rect@316910912 (0x12e3ad40)
12-13 15:08:26.876 D/LeakCanary( 1642): |   mTempRect2 = android.graphics.Rect@316910944 (0x12e3ad60)
12-13 15:08:26.877 D/LeakCanary( 1642): |   mTempRectF = android.graphics.RectF@316910976 (0x12e3ad80)
12-13 15:08:26.877 D/LeakCanary( 1642): |   mTopGlow = null
12-13 15:08:26.877 D/LeakCanary( 1642): |   mTouchSlop = 28
12-13 15:08:26.877 D/LeakCanary( 1642): |   mUpdateChildViewsRunnable = android.support.v7.widget.RecyclerView$1@314580944 (0x12c01fd0)
12-13 15:08:26.877 D/LeakCanary( 1642): |   mVelocityTracker = android.view.VelocityTracker@316911008 (0x12e3ada0)
12-13 15:08:26.877 D/LeakCanary( 1642): |   mViewFlinger = android.support.v7.widget.RecyclerView$ViewFlinger@316911040 (0x12e3adc0)
12-13 15:08:26.877 D/LeakCanary( 1642): |   mViewInfoProcessCallback = android.support.v7.widget.RecyclerView$4@314580960 (0x12c01fe0)
12-13 15:08:26.877 D/LeakCanary( 1642): |   mViewInfoStore = android.support.v7.widget.ViewInfoStore@314580976 (0x12c01ff0)
12-13 15:08:26.877 D/LeakCanary( 1642): |   mViewPrefetcher = android.support.v7.widget.RecyclerView$ViewPrefetcher@316911072 (0x12e3ade0)
12-13 15:08:26.877 D/LeakCanary( 1642): |   mAnimationListener = null
12-13 15:08:26.877 D/LeakCanary( 1642): |   mCachePaint = null
12-13 15:08:26.877 D/LeakCanary( 1642): |   mChildAcceptsDrag = false
12-13 15:08:26.877 D/LeakCanary( 1642): |   mChildCountWithTransientState = 0
12-13 15:08:26.877 D/LeakCanary( 1642): |   mChildTransformation = null
12-13 15:08:26.877 D/LeakCanary( 1642): |   mChildren = android.view.View[12]@316918080 (0x12e3c940)
12-13 15:08:26.878 D/LeakCanary( 1642): |   mChildrenCount = 2
12-13 15:08:26.878 D/LeakCanary( 1642): |   mCurrentDrag = null
12-13 15:08:26.878 D/LeakCanary( 1642): |   mCurrentDragView = null
12-13 15:08:26.878 D/LeakCanary( 1642): |   mDisappearingChildren = null
12-13 15:08:26.878 D/LeakCanary( 1642): |   mDragNotifiedChildren = null
12-13 15:08:26.878 D/LeakCanary( 1642): |   mFirstHoverTarget = null
12-13 15:08:26.878 D/LeakCanary( 1642): |   mFirstTouchTarget = null
12-13 15:08:26.878 D/LeakCanary( 1642): |   mFocused = null
12-13 15:08:26.878 D/LeakCanary( 1642): |   mGroupFlags = 2375763
12-13 15:08:26.878 D/LeakCanary( 1642): |   mHoveredSelf = false
12-13 15:08:26.878 D/LeakCanary( 1642): |   mInvalidateRegion = null
12-13 15:08:26.878 D/LeakCanary( 1642): |   mInvalidationTransformation = null
12-13 15:08:26.878 D/LeakCanary( 1642): |   mLastTouchDownIndex = -1
12-13 15:08:26.878 D/LeakCanary( 1642): |   mLastTouchDownTime = 0
12-13 15:08:26.878 D/LeakCanary( 1642): |   mLastTouchDownX = 346.0
12-13 15:08:26.878 D/LeakCanary( 1642): |   mLastTouchDownY = 1293.0
12-13 15:08:26.878 D/LeakCanary( 1642): |   mLayoutAnimationController = null
12-13 15:08:26.878 D/LeakCanary( 1642): |   mLayoutCalledWhileSuppressed = false
12-13 15:08:26.879 D/LeakCanary( 1642): |   mLayoutMode = -1
12-13 15:08:26.879 D/LeakCanary( 1642): |   mLayoutTransitionListener = android.view.ViewGroup$2@317091952 (0x12e67070)
12-13 15:08:26.879 D/LeakCanary( 1642): |   mLocalPoint = null
12-13 15:08:26.879 D/LeakCanary( 1642): |   mNestedScrollAxes = 0
12-13 15:08:26.879 D/LeakCanary( 1642): |   mOnHierarchyChangeListener = null
12-13 15:08:26.879 D/LeakCanary( 1642): |   mPersistentDrawingCache = 2
12-13 15:08:26.879 D/LeakCanary( 1642): |   mPreSortedChildren = null
12-13 15:08:26.879 D/LeakCanary( 1642): |   mSuppressLayout = false
12-13 15:08:26.879 D/LeakCanary( 1642): |   mTempPoint = float[2]@316911104 (0x12e3ae00)
12-13 15:08:26.879 D/LeakCanary( 1642): |   mTransientIndices = null
12-13 15:08:26.879 D/LeakCanary( 1642): |   mTransientViews = null
12-13 15:08:26.879 D/LeakCanary( 1642): |   mTransition = null
12-13 15:08:26.879 D/LeakCanary( 1642): |   mTransitioningViews = null
12-13 15:08:26.879 D/LeakCanary( 1642): |   mVisibilityChangingChildren = null
12-13 15:08:26.879 D/LeakCanary( 1642): |   mAccessibilityCursorPosition = -1
12-13 15:08:26.879 D/LeakCanary( 1642): |   mAccessibilityDelegate = android.support.v4.view.AccessibilityDelegateCompatJellyBean$1@317091968 (0x12e67080)
12-13 15:08:26.879 D/LeakCanary( 1642): |   mAccessibilityTraversalAfterId = -1
12-13 15:08:26.879 D/LeakCanary( 1642): |   mAccessibilityTraversalBeforeId = -1
12-13 15:08:26.879 D/LeakCanary( 1642): |   mAccessibilityViewId = -1
12-13 15:08:26.879 D/LeakCanary( 1642): |   mAnimator = null
12-13 15:08:26.879 D/LeakCanary( 1642): |   mAttachInfo = null
12-13 15:08:26.880 D/LeakCanary( 1642): |   mAttributes = null
12-13 15:08:26.880 D/LeakCanary( 1642): |   mBackground = null
12-13 15:08:26.880 D/LeakCanary( 1642): |   mBackgroundRenderNode = null
12-13 15:08:26.880 D/LeakCanary( 1642): |   mBackgroundResource = 0
12-13 15:08:26.880 D/LeakCanary( 1642): |   mBackgroundSizeChanged = true
12-13 15:08:26.880 D/LeakCanary( 1642): |   mBackgroundTint = null
12-13 15:08:26.880 D/LeakCanary( 1642): |   mBottom = 2112
12-13 15:08:26.880 D/LeakCanary( 1642): |   mCachingFailed = false
12-13 15:08:26.880 D/LeakCanary( 1642): |   mClipBounds = null
12-13 15:08:26.880 D/LeakCanary( 1642): |   mContentDescription = null
12-13 15:08:26.880 D/LeakCanary( 1642): |   mContext = com.blueapron.mobile.ui.MainActivity@314783456 (0x12c336e0)
12-13 15:08:26.880 D/LeakCanary( 1642): |   mCurrentAnimation = null
12-13 15:08:26.880 D/LeakCanary( 1642): |   mDrawableState = int[2]@1874654592 (0x6fbcf580)
12-13 15:08:26.880 D/LeakCanary( 1642): |   mDrawingCache = null
12-13 15:08:26.880 D/LeakCanary( 1642): |   mDrawingCacheBackgroundColor = 0
12-13 15:08:26.880 D/LeakCanary( 1642): |   mFloatingTreeObserver = null
12-13 15:08:26.880 D/LeakCanary( 1642): |   mForegroundInfo = null
12-13 15:08:26.880 D/LeakCanary( 1642): |   mGhostView = null
12-13 15:08:26.880 D/LeakCanary( 1642): |   mHasPerformedLongPress = false
12-13 15:08:26.880 D/LeakCanary( 1642): |   mID = 2131624065
12-13 15:08:26.880 D/LeakCanary( 1642): |   mIgnoreNextUpEvent = false
12-13 15:08:26.880 D/LeakCanary( 1642): |   mInContextButtonPress = false
12-13 15:08:26.881 D/LeakCanary( 1642): |   mInputEventConsistencyVerifier = null
12-13 15:08:26.881 D/LeakCanary( 1642): |   mKeyedTags = android.util.SparseArray@316911136 (0x12e3ae20)
12-13 15:08:26.881 D/LeakCanary( 1642): |   mLabelForId = -1
12-13 15:08:26.881 D/LeakCanary( 1642): |   mLastIsOpaque = false
12-13 15:08:26.881 D/LeakCanary( 1642): |   mLayerPaint = null
12-13 15:08:26.881 D/LeakCanary( 1642): |   mLayerType = 0
12-13 15:08:26.881 D/LeakCanary( 1642): |   mLayoutInsets = null
12-13 15:08:26.881 D/LeakCanary( 1642): |   mLayoutParams = android.support.v4.view.ViewPager$LayoutParams@316914848 (0x12e3bca0)
12-13 15:08:26.881 D/LeakCanary( 1642): |   mLeft = 0
12-13 15:08:26.881 D/LeakCanary( 1642): |   mLeftPaddingDefined = false
12-13 15:08:26.881 D/LeakCanary( 1642): |   mListenerInfo = null
12-13 15:08:26.881 D/LeakCanary( 1642): |   mMatchIdPredicate = null
12-13 15:08:26.881 D/LeakCanary( 1642): |   mMatchLabelForPredicate = null
12-13 15:08:26.881 D/LeakCanary( 1642): |   mMeasureCache = android.util.LongSparseLongArray@316911168 (0x12e3ae40)
12-13 15:08:26.881 D/LeakCanary( 1642): |   mMeasuredHeight = 2112
12-13 15:08:26.881 D/LeakCanary( 1642): |   mMeasuredWidth = 1440
12-13 15:08:26.881 D/LeakCanary( 1642): |   mMinHeight = 0
12-13 15:08:26.881 D/LeakCanary( 1642): |   mMinWidth = 0
12-13 15:08:26.881 D/LeakCanary( 1642): |   mNestedScrollingParent = null
12-13 15:08:26.881 D/LeakCanary( 1642): |   mNextFocusDownId = -1
12-13 15:08:26.881 D/LeakCanary( 1642): |   mNextFocusForwardId = -1
12-13 15:08:26.882 D/LeakCanary( 1642): |   mNextFocusLeftId = -1
12-13 15:08:26.882 D/LeakCanary( 1642): |   mNextFocusRightId = -1
12-13 15:08:26.882 D/LeakCanary( 1642): |   mNextFocusUpId = -1
12-13 15:08:26.882 D/LeakCanary( 1642): |   mOldHeightMeasureSpec = 1073743936
12-13 15:08:26.882 D/LeakCanary( 1642): |   mOldWidthMeasureSpec = 1073743264
12-13 15:08:26.882 D/LeakCanary( 1642): |   mOutlineProvider = android.view.ViewOutlineProvider$1@1874649728 (0x6fbce280)
12-13 15:08:26.882 D/LeakCanary( 1642): |   mOverScrollMode = 1
12-13 15:08:26.882 D/LeakCanary( 1642): |   mOverlay = null
12-13 15:08:26.882 D/LeakCanary( 1642): |   mPaddingBottom = 0
12-13 15:08:26.882 D/LeakCanary( 1642): |   mPaddingLeft = 0
12-13 15:08:26.882 D/LeakCanary( 1642): |   mPaddingRight = 0
12-13 15:08:26.882 D/LeakCanary( 1642): |   mPaddingTop = 0
12-13 15:08:26.882 D/LeakCanary( 1642): |   mParent = null
12-13 15:08:26.882 D/LeakCanary( 1642): |   mPendingCheckForLongPress = null
12-13 15:08:26.882 D/LeakCanary( 1642): |   mPendingCheckForTap = null
12-13 15:08:26.882 D/LeakCanary( 1642): |   mPerformClick = null
12-13 15:08:26.882 D/LeakCanary( 1642): |   mPrivateFlags = -2127947760
12-13 15:08:26.882 D/LeakCanary( 1642): |   mPrivateFlags2 = 1611867688
12-13 15:08:26.882 D/LeakCanary( 1642): |   mPrivateFlags3 = 16
12-13 15:08:26.882 D/LeakCanary( 1642): |   mRecreateDisplayList = false
12-13 15:08:26.883 D/LeakCanary( 1642): |   mRenderNode = android.view.RenderNode@316911200 (0x12e3ae60)
12-13 15:08:26.883 D/LeakCanary( 1642): |   mResources = android.content.res.Resources@316926480 (0x12e3ea10)
12-13 15:08:26.883 D/LeakCanary( 1642): |   mRight = 1440
12-13 15:08:26.883 D/LeakCanary( 1642): |   mRightPaddingDefined = false
12-13 15:08:26.883 D/LeakCanary( 1642): |   mScrollCache = null
12-13 15:08:26.883 D/LeakCanary( 1642): |   mScrollIndicatorDrawable = null
12-13 15:08:26.883 D/LeakCanary( 1642): |   mScrollX = 0
12-13 15:08:26.883 D/LeakCanary( 1642): |   mScrollY = 0
12-13 15:08:26.883 D/LeakCanary( 1642): |   mSendViewScrolledAccessibilityEvent = null
12-13 15:08:26.883 D/LeakCanary( 1642): |   mSendViewStateChangedAccessibilityEvent = null
12-13 15:08:26.883 D/LeakCanary( 1642): |   mSendingHoverAccessibilityEvents = false
12-13 15:08:26.883 D/LeakCanary( 1642): |   mStartActivityRequestWho = null
12-13 15:08:26.883 D/LeakCanary( 1642): |   mStateListAnimator = null
12-13 15:08:26.883 D/LeakCanary( 1642): |   mSystemUiVisibility = 0
12-13 15:08:26.883 D/LeakCanary( 1642): |   mTag = null
12-13 15:08:26.883 D/LeakCanary( 1642): |   mTempNestedScrollConsumed = null
12-13 15:08:26.883 D/LeakCanary( 1642): |   mTop = 0
12-13 15:08:26.883 D/LeakCanary( 1642): |   mTouchDelegate = null
12-13 15:08:26.883 D/LeakCanary( 1642): |   mTouchSlop = 28
12-13 15:08:26.883 D/LeakCanary( 1642): |   mTransformationInfo = android.view.View$TransformationInfo@316911232 (0x12e3ae80)
12-13 15:08:26.883 D/LeakCanary( 1642): |   mTransientStateCount = 0
12-13 15:08:26.884 D/LeakCanary( 1642): |   mTransitionName = null
4

3 回答 3

1

我希望你已经知道了原因,但是对于以后阅读这篇文章的其他人来说,我认为显示排除和已知泄漏的原因是:-

  • 通知您正在发生但已知的不好的事情,并且
  • 向您展示可用于避免此泄漏的 hack/fix/track。
于 2017-02-27T15:39:12.300 回答
0

我有这棵树,排除了泄漏:

AudioManager.mContext_static (excluded)
|
ContextImpl.mOuterContext
|
MyAudioActivity

在第一个元素下,它显示信息:

被规则 AUDIO_MANAGER__MCONTEXT_STATIC 排除
......因为三星向 AudioManager 添加了一个静态 mContext_static 字段,持有对活动的引用

然后在LeakCanary 常见问题解答中我找到了这个页面:

https://github.com/square/leakcanary/wiki/FAQ#can-a-leak-be-caused-by-the-android-sdk

这解释了开发人员无法修复某些泄漏。它指向具有上述条目的AndroidExcludedRefs.java文件。AUDIO_MANAGER__MCONTEXT_STATIC

于 2018-09-29T13:40:21.317 回答
0

似乎是LeakCanary故意显示通知,因为删除它们对某些用户来说是不好的行为,他们正在努力使这一点更清楚。

澄清什么是“排除泄漏”:

最初我们隐藏了排除的泄漏,但后来人们会抱怨他们会看到 VM 冻结并且之后找不到泄漏。

于 2018-10-30T14:58:45.103 回答