首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >LeakCanary报告在InputMethodManager中泄漏

LeakCanary报告在InputMethodManager中泄漏
EN

Stack Overflow用户
提问于 2016-01-06 11:17:01
回答 4查看 9.8K关注 0票数 7

我正在试图找出我的应用程序的漏洞,但我不确定这是否来自。

LeakCanary告诉我我可以忽略它。是那么回事吗?

代码语言:javascript
复制
01-06 12:04:56.580 6935-9159/com.mypackage D/LeakCanary: * LEAK CAN BE IGNORED.
01-06 12:04:56.580 6935-9159/com.mypackage D/LeakCanary: * com.mypackage.ui.map.MapComponentFragment has leaked:
01-06 12:04:56.580 6935-9159/com.mypackage D/LeakCanary: * GC ROOT android.view.inputmethod.InputMethodManager$1.this$0 (anonymous class extends com.android.internal.view.IInputMethodClient$Stub)
01-06 12:04:56.580 6935-9159/com.mypackage D/LeakCanary: * references android.view.inputmethod.InputMethodManager.mCurRootView
01-06 12:04:56.580 6935-9159/com.mypackage D/LeakCanary: * references com.android.internal.policy.impl.PhoneWindow$DecorView.mContext
01-06 12:04:56.580 6935-9159/com.mypackage D/LeakCanary: * references com.mypackage.ui.MainActivity.mFragments
01-06 12:04:56.580 6935-9159/com.mypackage D/LeakCanary: * references android.app.FragmentManagerImpl.mAdded
01-06 12:04:56.580 6935-9159/com.mypackage D/LeakCanary: * references java.util.ArrayList.array
01-06 12:04:56.580 6935-9159/com.mypackage D/LeakCanary: * references array java.lang.Object[].[0]
01-06 12:04:56.580 6935-9159/com.mypackage D/LeakCanary: * leaks com.mypackage.ui.map.MapComponentFragment instance
01-06 12:04:56.580 6935-9159/com.mypackage D/LeakCanary: * Reference Key: 0790f013-1c87-4d5f-8c10-db277187e3ce
01-06 12:04:56.580 6935-9159/com.mypackage D/LeakCanary: * Device: samsung samsung SM-N910C treltexx
01-06 12:04:56.580 6935-9159/com.mypackage D/LeakCanary: * Android Version: 5.1.1 API: 22 LeakCanary: 1.4-SNAPSHOT 2714152
01-06 12:04:56.580 6935-9159/com.mypackage D/LeakCanary: * Durations: watch=5085ms, gc=149ms, heap dump=2562ms, analysis=10313ms

这个碎片造成了几个漏洞,但我修复了它们。这个我不能让它消失。

有线索吗?

编辑

还有一件事,如果我想忽视它,这就足够了吗?

代码语言:javascript
复制
.instanceField("android.view.inputmethod.InputMethodManager", "mCurRootView")

但仍然出现在LeakCanary中

显然,这一泄密是在AndroidExcludeRef,但仍有报道。https://github.com/square/leakcanary/issues/322

EN

回答 4

Stack Overflow用户

发布于 2016-01-06 11:25:02

是的,你可以忽略这个漏洞。

检查这个问题:https://github.com/square/leakcanary/issues/256

票数 3
EN

Stack Overflow用户

发布于 2018-03-13 06:56:45

代码语言:javascript
复制
/**
 * call this method in activity onDestroy() method.
*/
public static void fixInputMethod(Context context) {
    if (context == null) {
        return;
    }
    InputMethodManager inputMethodManager = null;
    try {
        inputMethodManager = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
    } catch (Throwable th) {
        th.printStackTrace();
    }
    if (inputMethodManager == null) {
        return;
    }
    Field[] declaredFields = inputMethodManager.getClass().getDeclaredFields();
    for (Field declaredField : declaredFields) {
        try {
            if (!declaredField.isAccessible()) {
                declaredField.setAccessible(true);
            }
            Object obj = declaredField.get(inputMethodManager);
            if (obj == null || !(obj instanceof View)) {
                continue;
            }
            View view = (View) obj;
            if (view.getContext() == context) {
                declaredField.set(inputMethodManager, null);
            } else {
                continue;
            }
        } catch (Throwable th) {
            th.printStackTrace();
        }
    }
}
票数 3
EN

Stack Overflow用户

发布于 2017-03-04 07:22:51

是的,你可以忽略这个漏洞。解决上述漏洞的一个棘手的解决方案是这里,它适用于所有版本。

编辑2022年4月:

“媒体故事”的作者删除了它,但the solution was around using a transparent activity as an exit activity.

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34631818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档