三星注3:按下SPen侧按钮

时间:2017-08-31 14:08:35

标签: android memory-leaks samsung-mobile galaxy stylus-pen

如果不实现任何与SPen相关的SDK库,AppCompatActivity扩展类会发生内存泄漏。 以下事件序列通常会触发内存泄漏:

  1. 用户按下侧面按钮,激活Air Command工具。
  2. 不点击任何Air Command工具的图标,再次点击侧面按钮。
  3. 旋转屏幕,在这种情况下会导致活动被销毁并重新启动。
  4. 通过Android Studio执行Java堆转储会显示已销毁活动的内存泄漏。
  5. 分析器指示活动mContext变量由包类引用:com.samsung.android.smartclip.SpenGestureManager。这很可能导致活动内存泄漏。
  6. 是否有办法清除对SpenGestureManager类所持有的mContext变量的引用?这应该有希望允许垃圾收集器清除被破坏的活动。

    在以下设备/ Android版本(Samsung Galaxy Note 3 Duos)上检测到此问题:

    • 型号:SM-N9002
    • Android版本:4.4.2(KitKat)
    • 基带版本:N9002ZNUFNK1
    • Rom版本:SVA ROM SM-N9002 v9.0

    在三星Galaxy Note 10.1设备上测试了相同的应用程序,该设备似乎没有此内存泄漏问题。

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);