Samsung手机ClipboardUIManager引起的内存泄漏
项目中软件盘弹出不正常,弹出的方式也改变了,程序日志如下
E/ClipboardServiceEx﹕ clipEx is android.sec.clipboard.ClipboardExManager@1f70b420
E/ClipboardServiceEx﹕ clipEx has text data : false
这是三星系统的一个BUG,由于ClipboardUIManager是这样获取对象的
public static ClipboardUIManager getInstance(Context context) {
if (sInstance == null)
sInstance = new ClipboardUIManager(context);
return sInstance;
}
获取ClipboardUIManager对象传的Context实际上就是当前的Activity,导致该activity一直被引用没法释放了
解决办法在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();
}