满意答案
lsdiddewt73
2017.02.21
采纳率:54% 等级:10
已帮助:1171人
public static void fixInputMethodManagerLeak(Context context) {
if (context == null) {
return;
}
try {
// 对 mCurRootView mServedView mNextServedView 进行置空... InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm == null) {
return;
}
// author:sodino mail:sodino@qq.com Object obj_get = null;
Field f_mCurRootView = imm.getClass().getDeclaredField("mCurRootView");
Field f_mServedView = imm.getClass().getDeclaredField("mServedView");
Field f_mNextServedView = imm.getClass().getDeclaredField("mNextServedView");
if (f_mCurRootView.isAccessible() == false) {
f_mCurRootView.setAccessible(true);
}
obj_get = f_mCurRootView.get(imm);
if (obj_get != null) {
// 不为null则置为空 f_mCurRootView.set(imm, null);
}
if (f_mServedView.isAccessible() == false) {
f_mServedView.setAccessible(true);
}
obj_get = f_mServedView.get(imm);
if (obj_get != null) {
// 不为null则置为空 f_mServedView.set(imm, null);
}
if (f_mNextServedView.isAccessible() == false) {
f_mNextServedView.setAccessible(true);
}
obj_get = f_mNextServedView.get(imm);
if (obj_get != null) {
// 不为null则置为空 f_mNextServedView.set(imm, null);
}
}
catch (Throwable t) {
t.printStackTrace();
}
}
00分享举报