如果不实现任何与SPen相关的SDK库,AppCompatActivity
扩展类会发生内存泄漏。
以下事件序列通常会触发内存泄漏:
是否有办法清除对SpenGestureManager类所持有的mContext变量的引用?这应该有希望允许垃圾收集器清除被破坏的活动。
在以下设备/ Android版本(Samsung Galaxy Note 3 Duos)上检测到此问题:
在三星Galaxy Note 10.1设备上测试了相同的应用程序,该设备似乎没有此内存泄漏问题。
答案 0 :(得分:1)
从LeakCanary's sources可以看出,这是一个众所周知的内存泄漏。
SpenGestureManager
有一个静态mContext
字段,用于泄漏对活动的引用。是的, STATIC mContext 字段。
我认为可以使用反射来解决。这是一段应该有效的代码:
// Perform an if-check to see whether this is a Samsung device
Class clazz = Class.forName("com.samsung.android.smartclip.SpenGestureManager");
Field mContext = clazz.getDeclaredField("mContext");
mContext.setAccessible(true);
mContext.set(null, null);