我有一個MediaControllerCompat
當MediaSession
連接建立時創建一個實例。當這個連接完成我創建MediaControllerCompat
方式如下:MediaControllerCompat內存泄漏
MediaControllerCompat mediaController = new MediaControllerCompat(this, token);
MediaControllerCompat.setMediaController(this, mediaController);
令牌是由MediaSession
收購。
檢測到所有按下後退按鈕的時間。我沒有任何回撥/監聽器註冊到MediaControllerCompat
。我已經試過在活動的onDestroy()
方法中將MediaController
設置爲null,但沒有成功。
MediaControllerCompat.setMediaController(this, null);
關注下面的LeakCanary日誌。
D/LeakCanary: * com.me.PlaybackFullscreenActivity has leaked:
D/LeakCanary: * GC ROOT android.os.ResultReceiver$MyResultReceiver.this$0
D/LeakCanary: * references android.support.v4.media.session.MediaControllerCompat$MediaControllerImplApi21$1.this$0 (anonymous subclass of android.os.ResultReceiver)
D/LeakCanary: * references android.support.v4.media.session.MediaControllerCompat$MediaControllerImplApi23.mControllerObj
D/LeakCanary: * references android.media.session.MediaController.mContext
D/LeakCanary: * leaks com.me.ui.playback.PlaybackFullscreenActivity instance
D/LeakCanary: * Retaining: 54 KB.
D/LeakCanary: * Reference Key: 004ed9cd-c668-4d23-9ee6-cecad1b980a5
D/LeakCanary: * Device: unknown Android Android SDK built for x86_64 sdk_google_phone_x86_64
D/LeakCanary: * Android Version: 7.1 API: 25 LeakCanary: 1.5 00f37f5
D/LeakCanary: * Durations: watch=5018ms, gc=115ms, heap dump=1936ms, analysis=6011ms
D/LeakCanary: * Details:
D/LeakCanary: * Instance of android.os.ResultReceiver$MyResultReceiver
D/LeakCanary: | this$0 = android.support.v4[email protected]322318080 (0x13362f00)
D/LeakCanary: | mDescriptor = [email protected] (0x707ae1d0)
D/LeakCanary: | mObject = -813433536
D/LeakCanary: | mOwner = [email protected] (0x13362f60)
D/LeakCanary: | shadow$_klass_ = android.os.ResultReceiver$MyResultReceiver
D/LeakCanary: | shadow$_monitor_ = 0
D/LeakCanary: * Instance of android.support.v4.media.session.MediaControllerCompat$MediaControllerImplApi21$1
D/LeakCanary: | this$0 = android.support.[email protected]322317952 (0x13362e80)
D/LeakCanary: | mHandler = [email protected] (0x13362f40)
D/LeakCanary: | mLocal = true
D/LeakCanary: | mReceiver = [email protected] (0x13362f60)
D/LeakCanary: | shadow$_klass_ = android.support.v4.media.session.MediaControllerCompat$MediaControllerImplApi21$1
D/LeakCanary: | shadow$_monitor_ = 0
D/LeakCanary: * Instance of android.support.v4.media.session.MediaControllerCompat$MediaControllerImplApi23
D/LeakCanary: | mCallbackMap = [email protected] (0x133a49a0)
D/LeakCanary: | mControllerObj = [email protected] (0x133a49d0)
D/LeakCanary: | mExtraBinder = android.support.v4.medi[email protected]319823424 (0x13101e40)
D/LeakCanary: | mPendingCallbacks = null
D/LeakCanary: | shadow$_klass_ = android.support.v4.media.session.MediaControllerCompat$MediaControllerImplApi23
D/LeakCanary: | shadow$_monitor_ = 0
D/LeakCanary: * Instance of android.media.session.MediaController
D/LeakCanary: | static MSG_UPDATE_EXTRAS = 7
D/LeakCanary: | static MSG_DESTROYED = 8
D/LeakCanary: | static MSG_UPDATE_VOLUME = 4
D/LeakCanary: | static MSG_UPDATE_QUEUE_TITLE = 6
D/LeakCanary: | static MSG_UPDATE_PLAYBACK_STATE = 2
D/LeakCanary: | static $staticOverhead = byte[72]@317243393 (0x12e8c001)
D/LeakCanary: | static MSG_UPDATE_QUEUE = 5
D/LeakCanary: | static MSG_EVENT = 1
D/LeakCanary: | static TAG = [email protected] (0x706e8958)
D/LeakCanary: | static MSG_UPDATE_METADATA = 3
D/LeakCanary: | mCallbacks = [email protected] (0x13362ee0)
D/LeakCanary: | mCbRegistered = false
D/LeakCanary: | mCbStub = [email protected] (0x13362ea0)
D/LeakCanary: | mContext = [email protected] (0x133e1c00)
D/LeakCanary: | mLock = [email protected] (0x130b06c0)
D/LeakCanary: | mPackageName = null
D/LeakCanary: | mSessionBinder = [email protected] (0x130b0e90)
D/LeakCanary: | mTag = null
D/LeakCanary: | mToken = [email protected] (0x130b06e0)
D/LeakCanary: | mTransportControls = [email protected]4 (0x130b06d0)
D/LeakCanary: | shadow$_klass_ = android.media.session.MediaController
D/LeakCanary: | shadow$_monitor_ = 0
D/LeakCanary: * Instance of com.me.ui.playback.PlaybackFullscreenActivity
D/LeakCanary: | static $staticOverhead = byte[16]@317706241 (0x12efd001)
D/LeakCanary: | static serialVersionUID = 0
D/LeakCanary: | static $change = null
D/LeakCanary: | mToolbar = [email protected] (0x13238400)
D/LeakCanary: | playbackFragment = [email protected] (0x12fc4ab0)
D/LeakCanary: | mDelegate = [email protected] (0x13139b20)
D/LeakCanary: | mEatKeyUpEvent = false
D/LeakCanary: | mResources = null
D/LeakCanary: | mThemeId = 2131427393
D/LeakCanary: | mCreated = true
D/LeakCanary: | mFragments = [email protected] (0x134be460)
D/LeakCanary: | mHandler = [email protected] (0x134d6520)
D/LeakCanary: | mNextCandidateRequestIndex = 0
D/LeakCanary: | mOptionsMenuInvalidated = false
D/LeakCanary: | mPendingFragmentActivityResults = [email protected] (0x134d68a0)
D/LeakCanary: | mReallyStopped = true
D/LeakCanary: | mRequestedPermissionsFromFragment = false
D/LeakCanary: | mResumed = false
D/LeakCanary: | mRetaining = false
D/LeakCanary: | mStopped = true
D/LeakCanary: | mStartedActivityFromFragment = false
D/LeakCanary: | mStartedIntentSenderFromFragment = false
D/LeakCanary: | mExtraDataMap = [email protected] (0x134d6500)
D/LeakCanary: | mActionBar = null
D/LeakCanary: | mActionModeTypeStarting = 0
D/LeakCanary: | mActivityInfo = [email protected] (0x130fe080)
D/LeakCanary: | mActivityTransitionState = [email protected] (0x134cb940)
D/LeakCanary: | mApplication = [email protected] (0x12c4f910)
D/LeakCanary: | mCalled = true
D/LeakCanary: | mChangeCanvasToTranslucent = false
D/LeakCanary: | mChangingConfigurations = false
D/LeakCanary: | mComponent = [email protected] (0x134d3070)
D/LeakCanary: | mConfigChangeFlags = 0
D/LeakCanary: | mCurrentConfig = [email protected] (0x134da460)
D/LeakCanary: | mDecor = null
D/LeakCanary: | mDefaultKeyMode = 0
D/LeakCanary: | mDefaultKeySsb = null
D/LeakCanary: | mDestroyed = true
D/LeakCanary: | mDoReportFullyDrawn = false
D/LeakCanary: | mEmbeddedID = null
D/LeakCanary: | mEnableDefaultActionBarUp = false
D/LeakCanary: | mEnterTransitionListener = [email protected] (0x708e5728)
D/LeakCanary: | mExitTransitionListener = [email protected] (0x708e5728)
D/LeakCanary: | mFinished = true
D/LeakCanary: | mFragments = [email protected] (0x134be430)
D/LeakCanary: | mHandler = [email protected] (0x134d64a0)
D/LeakCanary: | mIdent = 169286722
D/LeakCanary: | mInstanceTracker = [email protected] (0x134be440)
D/LeakCanary: | mInstrumentation = [email protected] (0x12c733d0)
D/LeakCanary: | mIntent = [email protected] (0x134d2040)
D/LeakCanary: | mLastNonConfigurationInstances = null
D/LeakCanary: | mMainThread = [email protected] (0x12c357c0)
D/LeakCanary: | mManagedCursors = [email protected] (0x134d64c0)
D/LeakCanary: | mManagedDialogs = null
D/LeakCanary: | mMenuInflater = null
D/LeakCanary: | mParent = null
D/LeakCanary: | mReferrer = [email protected] (0x134d2280)
D/LeakCanary: | mResultCode = 0
D/LeakCanary: | mResultData = null
D/LeakCanary: | mResumed = false
D/LeakCanary: | mSearchEvent = null
D/LeakCanary: | mSearchManager = null
D/LeakCanary: | mStartedActivity = false
D/LeakCanary: | mStopped = true
D/LeakCanary: | mTemporaryPause = false
D/LeakCanary: | mTitle = [email protected] (0x12c1d0c0)
D/LeakCanary: | mTitleColor = 0
D/LeakCanary: | mTitleReady = true
D/LeakCanary: | mToken = [email protected] (0x134d4040)
D/LeakCanary: | mTranslucentCallback = null
D/LeakCanary: | mUiThread = [email protected] (0x74929258)
D/LeakCanary: | mVisibleBehind = false
D/LeakCanary: | mVisibleFromClient = true
D/LeakCanary: | mVisibleFromServer = true
D/LeakCanary: | mVoiceInteractor = null
D/LeakCanary: | mWindow = [email protected] (0x12ef0860)
D/LeakCanary: | mWindowAdded = true
D/LeakCanary: | mWindowManager = [email protected] (0x134d66c0)
D/LeakCanary: | mInflater = [email protected] (0x134c6fa0)
D/LeakCanary: | mOverrideConfiguration = null
D/LeakCanary: | mResources = [email protected] (0x12c73380)
D/LeakCanary: | mTheme = [email protected] (0x134d66e0)
D/LeakCanary: | mThemeResource = 2131427393
D/LeakCanary: | mBase = [email protected] (0x130fb500)
D/LeakCanary: | shadow$_klass_ = com.me.ui.playback.PlaybackFullscreenActivity
D/LeakCanary: | shadow$_monitor_ = 1293121552
D/LeakCanary: * Excluded Refs:
D/LeakCanary: | Field: android.view.inputmethod.InputMethodManager.mNextServedView
D/LeakCanary: | Field: android.view.inputmethod.InputMethodManager.mServedView
D/LeakCanary: | Field: android.view.inputmethod.InputMethodManager.mServedInputConnection
D/LeakCanary: | Field: android.view.inputmethod.InputMethodManager.mCurRootView
D/LeakCanary: | Field: android.os.UserManager.mContext
D/LeakCanary: | Field: android.net.ConnectivityManager.sInstance
D/LeakCanary: | Field: android.view.Choreographer$FrameDisplayEventReceiver.mMessageQueue (always)
D/LeakCanary: | Thread:FinalizerWatchdogDaemon (always)
D/LeakCanary: | Thread:main (always)
D/LeakCanary: | Thread:LeakCanary-Heap-Dump (always)
D/LeakCanary: | Class:java.lang.ref.WeakReference (always)
D/LeakCanary: | Class:java.lang.ref.SoftReference (always)
D/LeakCanary: | Class:java.lang.ref.PhantomReference (always)
D/LeakCanary: | Class:java.lang.ref.Finalizer (always)
D/LeakCanary: | Class:java.lang.ref.FinalizerReference (always)
有人能幫助我嗎?
在此先感謝。
我有同樣的問題 - 調查我的hprof內存轉儲文件我可以看到,這確實泄漏每次我旋轉屏幕 - 你有沒有找到一個解決方案。 –