Samsung手机ClipboardUIManager引起的内存泄漏

这些天应用登录后一直打印

    * Device: samsung samsung SM-G900F kltezh
    * Android Version: 5.0 API: 21 LeakCanary: 1.3.1
    * Durations: watch=7179ms, gc=142ms, heap dump=5176ms, analysis=61441ms
    [  29046:30530 D/LeakCanary ]
    * Details:
    * Class android.sec.clipboard.ClipboardUIManager
    |   static $staticOverhead = byte[] [id=0x71c176e1;length=32;size=48]
    |   static TAG = java.lang.String [id=0x70bcdae8]
    |   static mCBUIManager = null
    |   static sInstance = android.sec.clipboard.ClipboardUIManager [id=0x130cdbe0]
    |   static mClipboardMode = 0
    * Instance of android.sec.clipboard.ClipboardUIManager
    |   static $staticOverhead = byte[] [id=0x71c176e1;length=32;size=48]
    |   static TAG = java.lang.String [id=0x70bcdae8]
    |   static mCBUIManager = null
    |   static sInstance = android.sec.clipboard.ClipboardUIManager [id=0x130cdbe0]
    |   static mClipboardMode = 0
    |   mAdapter = null
    |   mContext = com.aixuetang.channelsforteachers.activitys.LoginActivity [id=0x12f59300]
    |   mHandler = null
    |   mParentView = null
    |   mViewID = 0
    * Instance of com.aixuetang.channelsforteachers.activitys.LoginActivity

貌似好像是内存泄露了,然后各种百度谷歌后发现这是三星系统的一个BUG,由于ClipboardUIManager是这样获取对象的

  public static ClipboardUIManager getInstance(Context context) {
    if (sInstance == null)
      sInstance = new ClipboardUIManager(context);
    return sInstance;
  }
在登录界面获取ClipboardUIManager对象传的Context实际上就是当前的Activity,这样LoginActivity就一直被引用没法释放了

解决办法在Application中先通过反射调用getInstance方法传入当前Application,具体代码如下

try {
            Class cls = Class.forName("android.sec.clipboard.ClipboardUIManager");
            Method m = cls.getDeclaredMethod("getInstance", Context.class);
            m.setAccessible(true);
            m.invoke(null, this);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
这个问题应该大部分应用程序都有,好好检查你的登录界面有没有泄漏哦,亲!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值