相关疑难解决方法(0)

主要活动在销毁后不会被垃圾收集,因为它是间接由InputMethodManager引用的

我从这里开始关注"避免内存泄漏"一文.

然而,所提出的解决方案不能解决泄漏问题.我在Windows XP(SDK 2.3.1)上使用Android模拟器测试了这个.我倾倒堆并检查主要活动仍在堆中(我使用了MAT)

这是我做的:

  1. 使用HelloWorldActivity创建HelloWorld应用程序(它没有子视图)
  2. 运行模拟器并启动HelloWorld应用程序.
  3. 单击后退键关闭它.
  4. 导致DDMS和转储堆中的gc < - 这里我找到了HelloWorldActivity实例.
  5. "GC Roots的路径"显示了以下路径.

HelloWorldActivity < - PhoneWindow $ DecorView < - InputMethodManager

InputMethodManager是一个单例和三个引用DecorView的引用,它引用了HelloWorldActivity.

我无法理解为什么InputMethodManager仍然引用DecorView实例,即使在活动被销毁之后.

是否有任何方法可以确保主要活动在关闭之后被销毁并且GC能够?

android garbage-collection android-activity inputmethodmanager

34
推荐指数
1
解决办法
7145
查看次数

Android内存泄漏:InputMethodManager,Bitmap

这有点奇怪,我能够摆脱我自己的内存泄漏,但在这种情况下我无法做到这一点.

下图显示堆包含从当前活动(mDecor指向当前活动)链接的位图(如2.5 MB).

我试图在整个应用程序中删除InputMethodManager实例,没有任何效果

我已经尝试设置键盘的默认状态(如果位图是某种用于系统键盘的sprint),仍然没有效果

android:windowSoftInputMode="stateHidden"
Run Code Online (Sandbox Code Playgroud)

什么都没有帮助,我能做些什么吗? 请注意,解决方案不是特定于Android API版本的(我已经在API 8和14/15/16上进行了测试,并且所有这些都有相同的问题)

堆


可能是一个错误,有人可以确认一下吗?

java android memory-leaks bitmap out-of-memory

6
推荐指数
0
解决办法
1863
查看次数