I have empty start activity, that redirects to other. On Android 7.0 (OnePlus 3T, OxygenOS 4.0.3) I started to get frequently memory leak report for it. I don't see same leak on other Android versions and phones.
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
if(!isTaskRoot()) {
super.onCreate(savedInstanceState);
finish();
return;
} else {
Intent intent = getTargetIntent();
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
super.onCreate(savedInstanceState);
}
finish();
overridePendingTransition(0, 0);
}
private Intent getTargetIntent() {
Intent intent;
if (!AppSession.getInstance().isLoggedIn()) {
intent = new Intent(this, WelcomeScreenActivity.class);
} else {
intent = new Intent(this, ContentActivity.class);
}
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
return intent;
}
}
And log:
03-16 13:50:50.479 D/LeakCanary: * im.example.app.ui.activities.MainActivity has leaked:
03-16 13:50:50.479 D/LeakCanary: * GC ROOT android.view.accessibility.AccessibilityManager$1.this$0 (anonymous subclass of android.view.accessibility.IAccessibilityManagerClient$Stub)
03-16 13:50:50.479 D/LeakCanary: * references android.view.accessibility.AccessibilityManager.mContext
03-16 13:50:50.479 D/LeakCanary: * references com.android.internal.policy.DecorContext.mPhoneWindow
03-16 13:50:50.479 D/LeakCanary: * references com.android.internal.policy.PhoneWindow.mContext
03-16 13:50:50.479 D/LeakCanary: * leaks im.example.app.ui.activities.MainActivity instance
03-16 13:50:50.479 D/LeakCanary: * Retaining: 6.0 KB.
03-16 13:50:50.479 D/LeakCanary: * Reference Key: 904592ad-79fb-4cd9-bfb0-3a504f3f6cd1
03-16 13:50:50.479 D/LeakCanary: * Device: OnePlus OnePlus ONEPLUS A3010 OnePlus3
03-16 13:50:50.479 D/LeakCanary: * Android Version: 7.0 API: 24 LeakCanary: 1.5 00f37f5
03-16 13:50:50.479 D/LeakCanary: * Durations: watch=5006ms, gc=166ms, heap dump=1556ms, analysis=77645ms
03-16 13:50:50.479 D/LeakCanary: * Details:
03-16 13:50:50.479 D/LeakCanary: * Instance of android.view.accessibility.AccessibilityManager$1
03-16 13:50:50.479 D/LeakCanary: | static $classOverhead = byte[744]@1877842785 (0x6fed9b61)
03-16 13:50:50.479 D/LeakCanary: | this$0 = android.view.accessibility.AccessibilityManager@316122832 (0x12d7a6d0)
03-16 13:50:50.479 D/LeakCanary: | mDescriptor = java.lang.String@1870204888 (0x6f790fd8)
03-16 13:50:50.479 D/LeakCanary: | mObject = 548269737120
03-16 13:50:50.479 D/LeakCanary: | mOwner = android.view.accessibility.AccessibilityManager$1@315653824 (0x12d07ec0)
03-16 13:50:50.479 D/LeakCanary: | shadow$_klass_ = android.view.accessibility.AccessibilityManager$1
03-16 13:50:50.479 D/LeakCanary: | shadow$_monitor_ = 0
03-16 13:50:50.479 D/LeakCanary: * Instance of android.view.accessibility.AccessibilityManager
03-16 13:50:50.479 D/LeakCanary: | static STATE_FLAG_TOUCH_EXPLORATION_ENABLED = 2
03-16 13:50:50.479 D/LeakCanary: | static sInstanceSync = java.lang.Object@1868378840 (0x6f5d32d8)
03-16 13:50:50.479 D/LeakCanary: | static DEBUG = false
03-16 13:50:50.479 D/LeakCanary: | static AUTOCLICK_DELAY_DEFAULT = 600
03-16 13:50:50.479 D/LeakCanary: | static LOG_TAG = java.lang.String@1872110800 (0x6f9624d0)
03-16 13:50:50.479 D/LeakCanary: | static sInstance = android.view.accessibility.AccessibilityManager@316122832 (0x12d7a6d0)
03-16 13:50:50.480 D/LeakCanary: | static DALTONIZER_DISABLED = -1
03-16 13:50:50.480 D/LeakCanary: | static STATE_FLAG_ACCESSIBILITY_ENABLED = 1
03-16 13:50:50.480 D/LeakCanary: | static STATE_FLAG_HIGH_TEXT_CONTRAST_ENABLED = 4
03-16 13:50:50.480 D/LeakCanary: | static DALTONIZER_CORRECT_DEUTERANOMALY = 12
03-16 13:50:50.480 D/LeakCanary: | static $classOverhead = byte[785]@1876949361 (0x6fdff971)
03-16 13:50:50.480 D/LeakCanary: | static DALTONIZER_SIMULATE_MONOCHROMACY = 0
03-16 13:50:50.480 D/LeakCanary: | mAccessibilityStateChangeListeners = java.util.concurrent.CopyOnWriteArrayList@316802656 (0x12e20660)
03-16 13:50:50.480 D/LeakCanary: | mClient = android.view.accessibility.AccessibilityManager$1@315653824 (0x12d07ec0)
03-16 13:50:50.480 D/LeakCanary: | mContext = com.android.internal.policy.DecorContext@316122928 (0x12d7a730)
03-16 13:50:50.480 D/LeakCanary: | mHandler = android.view.accessibility.AccessibilityManager$MyHandler@315653856 (0x12d07ee0)
03-16 13:50:50.480 D/LeakCanary: | mHighTextContrastStateChangeListeners = java.util.concurrent.CopyOnWriteArrayList@316802688 (0x12e20680)
03-16 13:50:50.480 D/LeakCanary: | mIsEnabled = false
03-16 13:50:50.480 D/LeakCanary: | mIsHighTextContrastEnabled = false
03-16 13:50:50.480 D/LeakCanary: | mIsTouchExplorationEnabled = false
03-16 13:50:50.480 D/LeakCanary: | mLock = java.lang.Object@315040464 (0x12c722d0)
03-16 13:50:50.480 D/LeakCanary: | mService = android.view.accessibility.IAccessibilityManager$Stub$Proxy@316802720 (0x12e206a0)
03-16 13:50:50.480 D/LeakCanary: | mTouchExplorationStateChangeListeners = java.util.concurrent.CopyOnWriteArrayList@316802672 (0x12e20670)
03-16 13:50:50.480 D/LeakCanary: | mUserId = 0
03-16 13:50:50.480 D/LeakCanary: | shadow$_klass_ = android.view.accessibility.AccessibilityManager
03-16 13:50:50.480 D/LeakCanary: | shadow$_monitor_ = 0
03-16 13:50:50.480 D/LeakCanary: * Instance of com.android.internal.policy.DecorContext
03-16 13:50:50.480 D/LeakCanary: | static $classOverhead = byte[1888]@1877746737 (0x6fec2431)
03-16 13:50:50.480 D/LeakCanary: | mActivityResources = android.content.res.Resources@316330560 (0x12dad240)
03-16 13:50:50.480 D/LeakCanary: | mPhoneWindow = com.android.internal.policy.PhoneWindow@315381600 (0x12cc5760)
03-16 13:50:50.480 D/LeakCanary: | mWindowManager = null
03-16 13:50:50.480 D/LeakCanary: | mInflater = null
03-16 13:50:50.480 D/LeakCanary: | mOverrideConfiguration = null
03-16 13:50:50.480 D/LeakCanary: | mResources = null
03-16 13:50:50.480 D/LeakCanary: | mTheme = android.content.res.Resources$Theme@316802576 (0x12e20610)
03-16 13:50:50.480 D/LeakCanary: | mThemeResource = 2131361857
03-16 13:50:50.480 D/LeakCanary: | mBase = im.example.app.App@315308544 (0x12cb3a00)
03-16 13:50:50.480 D/LeakCanary: | shadow$_klass_ = com.android.internal.policy.DecorContext
03-16 13:50:50.480 D/LeakCanary: | shadow$_monitor_ = 0
03-16 13:50:50.480 D/LeakCanary: * Instance of com.android.internal.policy.PhoneWindow
03-16 13:50:50.480 D/LeakCanary: | static USE_DEFAULT_TRANSITION = android.transition.TransitionSet@1958606848 (0x74bdf800)
03-16 13:50:50.480 D/LeakCanary: | static ACCESSIBILITY_FOCUSED_ID_TAG = java.lang.String@1872202680 (0x6f978bb8)
03-16 13:50:50.480 D/LeakCanary: | static FLAG_RESOURCE_SET_LOGO = 2
03-16 13:50:50.480 D/LeakCanary: | static PANELS_TAG = java.lang.String@1872234648 (0x6f980898)
03-16 13:50:50.480 D/LeakCanary: | static TAG = java.lang.String@1872213600 (0x6f97b660)
03-16 13:50:50.480 D/LeakCanary: | static FLAG_RESOURCE_SET_ICON_FALLBACK = 4
03-16 13:50:50.480 D/LeakCanary: | static ACTION_BAR_TAG = java.lang.String@1872236544 (0x6f981000)
03-16 13:50:50.480 D/LeakCanary: | static FLAG_RESOURCE_SET_ICON = 1
03-16 13:50:50.480 D/LeakCanary: | static DEBUG = false
03-16 13:50:50.480 D/LeakCanary: | static FOCUSED_ID_TAG = java.lang.String@1872220400 (0x6f97d0f0)
03-16 13:50:50.480 D/LeakCanary: | static VIEWS_TAG = java.lang.String@1872234600 (0x6f980868)
03-16 13:50:50.480 D/LeakCanary: | static $classOverhead = byte[2137]@1876828481 (0x6fde2141)
03-16 13:50:50.480 D/LeakCanary: | static ACCESSIBILITY_FOCUSED_VIRTUAL_ID_TAG = java.lang.String@1872216568 (0x6f97c1f8)
03-16 13:50:50.480 D/LeakCanary: | static CUSTOM_TITLE_COMPATIBLE_FEATURES = 13505
03-16 13:50:50.480 D/LeakCanary: | static DEFAULT_BACKGROUND_FADE_DURATION_MS = 300
03-16 13:50:50.480 D/LeakCanary: | static sRotationWatcher = com.android.internal.policy.PhoneWindow$RotationWatcher@1958607000 (0x74bdf898)
03-16 13:50:50.480 D/LeakCanary: | mActionMenuPresenterCallback = null
03-16 13:50:50.480 D/LeakCanary: | mAllowEnterTransitionOverlap = java.lang.Boolean@1868501752 (0x6f5f12f8)
03-16 13:50:50.480 D/LeakCanary: | mAllowReturnTransitionOverlap = java.lang.Boolean@1868501752 (0x6f5f12f8)
03-16 13:50:50.480 D/LeakCanary: | mAlwaysReadCloseOnTouchAttr = false
03-16 13:50:50.480 D/LeakCanary: | mAudioManager = null
03-16 13:50:50.480 D/LeakCanary: | mBackgroundDrawable = null
03-16 13:50:50.480 D/LeakCanary: | mBackgroundFadeDurationMillis = 300
03-16 13:50:50.480 D/LeakCanary: | mBackgroundFallbackResource = 17170642
03-16 13:50:50.480 D/LeakCanary: | mBackgroundResource = 2131689481
03-16 13:50:50.480 D/LeakCanary: | mCircularProgressBar = null
03-16 13:50:50.480 D/LeakCanary: | mClipToOutline = true
03-16 13:50:50.480 D/LeakCanary: | mClosingActionMenu = false
03-16 13:50:50.480 D/LeakCanary: | mContentParent = android.widget.FrameLayout@319540224 (0x130bcc00)
03-16 13:50:50.480 D/LeakCanary: | mContentParentExplicitlySet = false
03-16 13:50:50.480 D/LeakCanary: | mContentScene = null
03-16 13:50:50.480 D/LeakCanary: | mContextMenu = null
03-16 13:50:50.480 D/LeakCanary: | mContextMenuCallback = com.android.internal.policy.PhoneWindow$PhoneWindowMenuCallback@316881480 (0x12e33a48)
03-16 13:50:50.480 D/LeakCanary: | mContextMenuHelper = null
03-16 13:50:50.480 D/LeakCanary: | mDecor = com.android.internal.policy.DecorView@318679040 (0x12fea800)
03-16 13:50:50.480 D/LeakCanary: | mDecorCaptionShade = 0
03-16 13:50:50.480 D/LeakCanary: | mDecorContentParent = null
03-16 13:50:50.480 D/LeakCanary: | mDrawables = null
03-16 13:50:50.480 D/LeakCanary: | mElevation = 0.0
03-16 13:50:50.480 D/LeakCanary: | mEnterTransition = android.transition.Fade@317158304 (0x12e773a0)
03-16 13:50:50.480 D/LeakCanary: | mExitTransition = null
03-16 13:50:50.480 D/LeakCanary: | mFixedHeightMajor = android.util.TypedValue@319912504 (0x13117a38)
03-16 13:50:50.480 D/LeakCanary: | mFixedHeightMinor = android.util.TypedValue@319912544 (0x13117a60)
03-16 13:50:50.480 D/LeakCanary: | mFixedWidthMajor = android.util.TypedValue@319912424 (0x131179e8)
03-16 13:50:50.480 D/LeakCanary: | mFixedWidthMinor = android.util.TypedValue@319912464 (0x13117a10)
03-16 13:50:50.480 D/LeakCanary: | mForceDecorInstall = false
03-16 13:50:50.480 D/LeakCanary: | mForcedNavigationBarColor = false
03-16 13:50:50.480 D/LeakCanary: | mForcedStatusBarColor = false
03-16 13:50:50.480 D/LeakCanary: | mFrameResource = 0
03-16 13:50:50.480 D/LeakCanary: | mHorizontalProgressBar = null
03-16 13:50:50.480 D/LeakCanary: | mIconRes = 0
03-16 13:50:50.480 D/LeakCanary: | mInvalidatePanelMenuFeatures = 0
03-16 13:50:50.480 D/LeakCanary: | mInvalidatePanelMenuPosted = false
03-16 13:50:50.480 D/LeakCanary: | mInvalidatePanelMenuRunnable = com.android.internal.policy.PhoneWindow$1@316801664 (0x12e20280)
03-16 13:50:50.480 D/LeakCanary: | mIsFloating = false
03-16 13:50:50.480 D/LeakCanary: | mIsStartingWindow = false
03-16 13:50:50.480 D/LeakCanary: | mIsTranslucent = false
03-16 13:50:50.480 D/LeakCanary: | mKeyguardManager = null
03-16 13:50:50.480 D/LeakCanary: | mLayoutInflater = com.android.internal.policy.PhoneLayoutInflater@316124752 (0x12d7ae50)
03-16 13:50:50.480 D/LeakCanary: | mLeftIconView = null
03-16 13:50:50.480 D/LeakCanary: | mLoadElevation = true
03-16 13:50:50.480 D/LeakCanary: | mLogoRes = 0
03-16 13:50:50.480 D/LeakCanary: | mMediaController = null
03-16 13:50:50.480 D/LeakCanary: | mMinWidthMajor = android.util.TypedValue@316330480 (0x12dad1f0)
03-16 13:50:50.480 D/LeakCanary: | mMinWidthMinor = android.util.TypedValue@316330160 (0x12dad0b0)
03-16 13:50:50.480 D/LeakCanary: | mNavigationBarColor = -16777216
03-16 13:50:50.480 D/LeakCanary: | mNeedApplyTheme = false
03-16 13:50:50.480 D/LeakCanary: | mPanelChordingKey = 0
03-16 13:50:50.480 D/LeakCanary: | mPanelMenuPresenterCallback = null
03-16 13:50:50.480 D/LeakCanary: | mPanels = null
03-16 13:50:50.480 D/LeakCanary: | mPreparedPanel = null
03-16 13:50:50.480 D/LeakCanary: | mReenterTransition = android.transition.TransitionSet@1958606848 (0x74bdf800)
03-16 13:50:50.480 D/LeakCanary: | mResourcesSetFlags = 0
03-16 13:50:50.480 D/LeakCanary: | mReturnTransition = android.transition.TransitionSet@1958606848 (0x74bdf800)
03-16 13:50:50.480 D/LeakCanary: | mRightIconView = null
03-16 13:50:50.480 D/LeakCanary: | mSharedElementEnterTransition = android.transition.TransitionSet@317374720 (0x12eac100)
03-16 13:50:50.480 D/LeakCanary: | mSharedElementExitTransition = android.transition.TransitionSet@317375200 (0x12eac2e0)
03-16 13:50:50.480 D/LeakCanary: | mSharedElementReenterTransition = android.transition.TransitionSet@1958606848 (0x74bdf800)
03-16 13:50:50.480 D/LeakCanary: | mSharedElementReturnTransition = android.transition.TransitionSet@1958606848 (0x74bdf800)
03-16 13:50:50.480 D/LeakCanary: | mSharedElementsUseOverlay = java.lang.Boolean@1868501752 (0x6f5f12f8)
03-16 13:50:50.480 D/LeakCanary: | mStatusBarColor = -5987164
03-16 13:50:50.480 D/LeakCanary: | mSupportsPictureInPicture = false
03-16 13:50:50.481 D/LeakCanary: | mTakeInputQueueCallback = null
03-16 13:50:50.481 D/LeakCanary: | mTakeSurfaceCallback = null
03-16 13:50:50.481 D/LeakCanary: | mTextColor = -10921639
03-16 13:50:50.481 D/LeakCanary: | mTheme = 2131361857
03-16 13:50:50.481 D/LeakCanary: | mThemeResId = 0
03-16 13:50:50.481 D/LeakCanary: | mTitle = null
03-16 13:50:50.481 D/LeakCanary: | mTitleColor = -10921639
03-16 13:50:50.481 D/LeakCanary: | mTitleView = null
03-16 13:50:50.481 D/LeakCanary: | mTransitionManager = android.transition.TransitionManager@316803936 (0x12e20b60)
03-16 13:50:50.481 D/LeakCanary: | mUiOptions = 0
03-16 13:50:50.481 D/LeakCanary: | mUseDecorContext = true
03-16 13:50:50.481 D/LeakCanary: | mVolumeControlStreamType = -2147483648
03-16 13:50:50.481 D/LeakCanary: | mActiveChild = null
03-16 13:50:50.481 D/LeakCanary: | mAppName = java.lang.String@316926416 (0x12e3e9d0)
03-16 13:50:50.481 D/LeakCanary: | mAppToken = android.os.BinderProxy@315162784 (0x12c900a0)
03-16 13:50:50.481 D/LeakCanary: | mCallback = android.support.v7.app.AppCompatDelegateImplN$AppCompatWindowCallbackN@315653312 (0x12d07cc0)
03-16 13:50:50.481 D/LeakCanary: | mCloseOnTouchOutside = false
03-16 13:50:50.481 D/LeakCanary: | mContainer = null
03-16 13:50:50.481 D/LeakCanary: | mContext = im.example.app.ui.activities.MainActivity@315248128 (0x12ca4e00)
03-16 13:50:50.481 D/LeakCanary: | mDefaultWindowFormat = -1
03-16 13:50:50.481 D/LeakCanary: | mDestroyed = true
03-16 13:50:50.481 D/LeakCanary: | mFeatures = 8259
03-16 13:50:50.481 D/LeakCanary: | mForcedWindowFlags = -2139029248
03-16 13:50:50.481 D/LeakCanary: | mHardwareAccelerated = true
03-16 13:50:50.481 D/LeakCanary: | mHasChildren = false
03-16 13:50:50.481 D/LeakCanary: | mHasSoftInputMode = false
03-16 13:50:50.481 D/LeakCanary: | mHaveDimAmount = false
03-16 13:50:50.481 D/LeakCanary: | mHaveWindowFormat = false
03-16 13:50:50.481 D/LeakCanary: | mIsActive = false
03-16 13:50:50.481 D/LeakCanary: | mLocalFeatures = 8259
03-16 13:50:50.481 D/LeakCanary: | mOnRestrictedCaptionAreaChangedListener = null
03-16 13:50:50.481 D/LeakCanary: | mOnWindowDismissedCallback = im.example.app.ui.activities.MainActivity@315248128 (0x12ca4e00)
03-16 13:50:50.481 D/LeakCanary: | mOverlayWithDecorCaptionEnabled = false
03-16 13:50:50.481 D/LeakCanary: | mRestrictedCaptionAreaRect = null
03-16 13:50:50.481 D/LeakCanary: | mSetCloseOnTouchOutside = false
03-16 13:50:50.481 D/LeakCanary: | mWindowAttributes = android.view.WindowManager$LayoutParams@316627056 (0x12df5870)
03-16 13:50:50.481 D/LeakCanary: | mWindowControllerCallback = im.example.app.ui.activities.MainActivity@315248128 (0x12ca4e00)
03-16 13:50:50.481 D/LeakCanary: | mWindowManager = android.view.WindowManagerImpl@316881744 (0x12e33b50)
03-16 13:50:50.481 D/LeakCanary: | mWindowStyle = android.content.res.TypedArray@316124416 (0x12d7ad00)
03-16 13:50:50.481 D/LeakCanary: | shadow$_klass_ = com.android.internal.policy.PhoneWindow
03-16 13:50:50.481 D/LeakCanary: | shadow$_monitor_ = 0
03-16 13:50:50.481 D/LeakCanary: * Instance of im.example.app.ui.activities.MainActivity
03-16 13:50:50.481 D/LeakCanary: | static serialVersionUID = 1592163535383681309
03-16 13:50:50.481 D/LeakCanary: | static $change = null
03-16 13:50:50.481 D/LeakCanary: | static $classOverhead = byte[4488]@317804545 (0x12f15001)
03-16 13:50:50.481 D/LeakCanary: | mDelegate = android.support.v7.app.AppCompatDelegateImplN@316955232 (0x12e45a60)
03-16 13:50:50.481 D/LeakCanary: | mEatKeyUpEvent = false
03-16 13:50:50.481 D/LeakCanary: | mResources = null
03-16 13:50:50.481 D/LeakCanary: | mThemeId = 2131361857
03-16 13:50:50.481 D/LeakCanary: | mCreated = false
03-16 13:50:50.481 D/LeakCanary: | mFragments = android.support.v4.app.FragmentController@316801872 (0x12e20350)
03-16 13:50:50.481 D/LeakCanary: | mHandler = android.support.v4.app.FragmentActivity$1@315652032 (0x12d077c0)
03-16 13:50:50.481 D/LeakCanary: | mNextCandidateRequestIndex = 0
03-16 13:50:50.481 D/LeakCanary: | mOptionsMenuInvalidated = false
03-16 13:50:50.481 D/LeakCanary: | mPendingFragmentActivityResults = android.support.v4.util.SparseArrayCompat@318133056 (0x12f65340)
03-16 13:50:50.481 D/LeakCanary: | mReallyStopped = true
03-16 13:50:50.481 D/LeakCanary: | mRequestedPermissionsFromFragment = false
03-16 13:50:50.481 D/LeakCanary: | mResumed = false
03-16 13:50:50.481 D/LeakCanary: | mRetaining = false
03-16 13:50:50.481 D/LeakCanary: | mStopped = false
03-16 13:50:50.481 D/LeakCanary: | mStartedActivityFromFragment = false
03-16 13:50:50.481 D/LeakCanary: | mStartedIntentSenderFromFragment = false
03-16 13:50:50.481 D/LeakCanary: | mExtraDataMap = android.support.v4.util.SimpleArrayMap@316880688 (0x12e33730)
03-16 13:50:50.481 D/LeakCanary: | mActionBar = null
03-16 13:50:50.481 D/LeakCanary: | mActionModeTypeStarting = 0
03-16 13:50:50.481 D/LeakCanary: | mActivityInfo = android.content.pm.ActivityInfo@315129136 (0x12c87d30)
03-16 13:50:50.481 D/LeakCanary: | mActivityTransitionState = android.app.ActivityTransitionState@315096024 (0x12c7fbd8)
03-16 13:50:50.481 D/LeakCanary: | mApplication = im.example.app.App@315308544 (0x12cb3a00)
03-16 13:50:50.481 D/LeakCanary: | mCalled = true
03-16 13:50:50.481 D/LeakCanary: | mChangeCanvasToTranslucent = false
03-16 13:50:50.481 D/LeakCanary: | mChangingConfigurations = false
03-16 13:50:50.481 D/LeakCanary: | mComponent = android.content.ComponentName@315150416 (0x12c8d050)
03-16 13:50:50.481 D/LeakCanary: | mConfigChangeFlags = 0
03-16 13:50:50.481 D/LeakCanary: | mCurrentConfig = android.content.res.Configuration@315182584 (0x12c94df8)
03-16 13:50:50.481 D/LeakCanary: | mDecor = null
03-16 13:50:50.481 D/LeakCanary: | mDefaultKeyMode = 0
03-16 13:50:50.481 D/LeakCanary: | mDefaultKeySsb = null
03-16 13:50:50.481 D/LeakCanary: | mDestroyed = true
03-16 13:50:50.481 D/LeakCanary: | mDoReportFullyDrawn = true
03-16 13:50:50.481 D/LeakCanary: | mEatKeyUpEvent = false
03-16 13:50:50.481 D/LeakCanary: | mEmbeddedID = null
03-16 13:50:50.481 D/LeakCanary: | mEnableDefaultActionBarUp = false
03-16 13:50:50.481 D/LeakCanary: | mEnterTransitionListener = android.app.SharedElementCallback$1@1876896536 (0x6fdf2b18)
03-16 13:50:50.481 D/LeakCanary: | mExitTransitionListener = android.app.SharedElementCallback$1@1876896536 (0x6fdf2b18)
03-16 13:50:50.481 D/LeakCanary: | mFinished = true
03-16 13:50:50.481 D/LeakCanary: | mFragments = android.app.FragmentController@316801952 (0x12e203a0)
03-16 13:50:50.481 D/LeakCanary: | mHandler = android.os.Handler@315651936 (0x12d07760)
03-16 13:50:50.481 D/LeakCanary: | mHasCurrentPermissionsRequest = false
03-16 13:50:50.481 D/LeakCanary: | mIdent = 215673234
03-16 13:50:50.481 D/LeakCanary: | mInstanceTracker = android.os.StrictMode$InstanceTracker@316801936 (0x12e20390)
03-16 13:50:50.481 D/LeakCanary: | mInstrumentation = android.app.Instrumentation@315334936 (0x12cba118)
03-16 13:50:50.481 D/LeakCanary: | mIntent = android.content.Intent@315142264 (0x12c8b078)
03-16 13:50:50.481 D/LeakCanary: | mLastNonConfigurationInstances = null
03-16 13:50:50.481 D/LeakCanary: | mMainThread = android.app.ActivityThread@316091792 (0x12d72d90)
03-16 13:50:50.481 D/LeakCanary: | mManagedCursors = java.util.ArrayList@316880640 (0x12e33700)
03-16 13:50:50.481 D/LeakCanary: | mManagedDialogs = null
03-16 13:50:50.481 D/LeakCanary: | mMenuInflater = null
03-16 13:50:50.481 D/LeakCanary: | mParent = null
03-16 13:50:50.481 D/LeakCanary: | mReferrer = java.lang.String@315142880 (0x12c8b2e0)
03-16 13:50:50.481 D/LeakCanary: | mResultCode = 0
03-16 13:50:50.481 D/LeakCanary: | mResultData = null
03-16 13:50:50.481 D/LeakCanary: | mResumed = false
03-16 13:50:50.481 D/LeakCanary: | mSearchEvent = null
03-16 13:50:50.481 D/LeakCanary: | mSearchManager = null
03-16 13:50:50.481 D/LeakCanary: | mStartedActivity = false
03-16 13:50:50.481 D/LeakCanary: | mStopped = false
03-16 13:50:50.481 D/LeakCanary: | mTaskDescription = android.app.ActivityManager$TaskDescription@315651968 (0x12d07780)
03-16 13:50:50.481 D/LeakCanary: | mTemporaryPause = false
03-16 13:50:50.481 D/LeakCanary: | mTitle = java.lang.String@316124656 (0x12d7adf0)
03-16 13:50:50.481 D/LeakCanary: | mTitleColor = 0
03-16 13:50:50.481 D/LeakCanary: | mTitleReady = false
03-16 13:50:50.481 D/LeakCanary: | mToken = android.os.BinderProxy@315162784 (0x12c900a0)
03-16 13:50:50.481 D/LeakCanary: | mTranslucentCallback = null
03-16 13:50:50.481 D/LeakCanary: | mUiThread = java.lang.Thread@1958340848 (0x74b9e8f0)
03-16 13:50:50.482 D/LeakCanary: | mVisibleBehind = false
03-16 13:50:50.482 D/LeakCanary: | mVisibleFromClient = true
03-16 13:50:50.482 D/LeakCanary: | mVisibleFromServer = false
03-16 13:50:50.482 D/LeakCanary: | mVoiceInteractor = null
03-16 13:50:50.482 D/LeakCanary: | mWindow = com.android.internal.policy.PhoneWindow@315381600 (0x12cc5760)
03-16 13:50:50.482 D/LeakCanary: | mWindowAdded = false
03-16 13:50:50.482 D/LeakCanary: | mWindowManager = android.view.WindowManagerImpl@316881744 (0x12e33b50)
03-16 13:50:50.482 D/LeakCanary: | mInflater = com.android.internal.policy.PhoneLayoutInflater@316124752 (0x12d7ae50)
03-16 13:50:50.482 D/LeakCanary: | mOverrideConfiguration = null
03-16 13:50:50.482 D/LeakCanary: | mResources = android.content.res.Resources@316330560 (0x12dad240)
03-16 13:50:50.482 D/LeakCanary: | mTheme = android.content.res.Resources$Theme@316801488 (0x12e201d0)
03-16 13:50:50.482 D/LeakCanary: | mThemeResource = 2131361857
03-16 13:50:50.482 D/LeakCanary: | mBase = android.app.ContextImpl@318308736 (0x12f90180)
03-16 13:50:50.482 D/LeakCanary: | shadow$_klass_ = im.example.app.ui.activities.MainActivity
03-16 13:50:50.482 D/LeakCanary: | shadow$_monitor_ = 1073742920
03-16 13:50:50.482 D/LeakCanary: * Excluded Refs:
03-16 13:50:50.482 D/LeakCanary: | Field: android.view.Choreographer$FrameDisplayEventReceiver.mMessageQueue (always)
03-16 13:50:50.482 D/LeakCanary: | Thread:FinalizerWatchdogDaemon (always)
03-16 13:50:50.482 D/LeakCanary: | Thread:main (always)
03-16 13:50:50.482 D/LeakCanary: | Thread:LeakCanary-Heap-Dump (always)
03-16 13:50:50.482 D/LeakCanary: | Class:java.lang.ref.WeakReference (always)
03-16 13:50:50.482 D/LeakCanary: | Class:java.lang.ref.SoftReference (always)
03-16 13:50:50.482 D/LeakCanary: | Class:java.lang.ref.PhantomReference (always)
03-16 13:50:50.482 D/LeakCanary: | Class:java.lang.ref.Finalizer (always)
03-16 13:50:50.482 D/LeakCanary: | Class:java.lang.ref.FinalizerReference (always)
confirming the above on a Oneplus 3T running OxygenOS 4.1.0 Android 7.1.1
i has this the same,confusing was wrong with my code
@rafaelekol Does it also leak if you inflate an empty LinearLayout as the activity view?
confirming the above on a Oneplus 3T running OxygenOS 4.1.3 Android 7.1.1
I have the same leak. I am not inflating any layout, it does some stuff and finishes. Each time leakcanary reports this.
Device - Oneplus 3 running OxygenOS 4.1.3 Android 7.1.1
Empty Splash Screen activity, same leak.
Device - Oneplus 3 running OxygenOS 4.1.3 Android 7.1.1 too
Confirmation of the same issue (same device, same OS).
Only first finished() activity leaks.
I guess may be related to older issue, but the proposed solution didn't work.
We already investigated this, and fixed internally(It was caused by Context leak), OnePlus 3/3T will get fixed in next OTA Update.
Very similar issue happens also for Samsung Galaxy S8 N OS.
Thank you for your report, it looks like this might be a leak in the Android SDK.
Please read the following entry in our FAQ: Can a leak be caused by the Android SDK?.
We don't have enough time to do the investigative work on this type of issue, so I will close this issue for now. We'll happily take contributions to AndroidExcludedRefs.java, if the leak is demonstrated and the fix provided to AOSP.
Not in my immediate list, but as PY mentions, we'll take contributions to AndroidExcludedRefs.java if an actual leak occurs in AOSP.
Most helpful comment
We already investigated this, and fixed internally(It was caused by Context leak), OnePlus 3/3T will get fixed in next OTA Update.