相关疑难解决方法(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
查看次数

EditText导致内存泄漏

介绍:

我有一个具有以下结构的应用程序:ActionBar up top(ActionBarSherlock)ViewPagerIndicator(用于标签)ViewPager(hosts Fragments)

我有一个问题,我的一个片段导致相当大的内存泄漏.我将问题缩小到以下情况:

导致泄漏的碎片只会在其onCreateView方法中使布局膨胀.这是通过以下方式完成的:

return inflater.inflate(R.layout.filter_auctions_fragment, container, false);
Run Code Online (Sandbox Code Playgroud)

这里没什么不寻常的.

布局文件只包括一个ScrollView,LinearLayout两个EditText,它出现(包括更正常的东西,但我将问题范围缩小到只有这些意见,以使简单).

现在用于添加片段的代码:mTabsAdapter.addTab(tabName,ProblematicFragment.class);

mTabsAdapter是一个TabsAdapter扩展FragmentPagerAdapter支持库的类的实例.它是相当标准的,所以我不包括使这个问题尽可能短的来源.

现在有趣的部分:

这是当我来回旋转设备几次时堆发生的事情:

12-28 12:26:27.180: D/dalvikvm(18841): GC_CONCURRENT freed 530K, 7% free 10701K/11436K, paused 4ms+7ms, total 58ms
12-28 12:26:27.180: D/dalvikvm(18841): WAIT_FOR_CONCURRENT_GC blocked 24ms
12-28 12:26:28.270: D/dalvikvm(18841): GC_CONCURRENT freed 737K, 8% free 11048K/11964K, paused 4ms+5ms, total 53ms
12-28 12:26:29.510: D/dalvikvm(18841): GC_CONCURRENT freed 789K, 8% free 11464K/12436K, paused 5ms+5ms, total 42ms
12-28 12:26:30.640: D/dalvikvm(18841): GC_CONCURRENT freed …
Run Code Online (Sandbox Code Playgroud)

memory heap android memory-leaks memory-management

16
推荐指数
1
解决办法
5163
查看次数

InputMethodManager保存对tabhost的引用 - Memory Leak - OOM Error

视图层次结构如下TabActivity- > ActivityGroups- > Activities.

使用MAT我发现TabWidget被引用的TabHost引用InputMethodManager,因此TabWidget被泄露.在后续启动应用程序时抛出OutOfMemory错误.

同样,我的所有活动也被引用InputMethodManager.(关闭应用程序后,我的所有活动组,活动,tabactivity,tabhost和tabwidget都被泄露!!)

在正确完成应用程序(按回键)后,将在logcat中显示以下内容

WARN/InputManagerService(99):在非聚焦客户端上启动输入com.android.internal.view.IInputMethodClient$Stub$Proxy@44a87748(uid = 10052 pid = 1463)

如何从InputMethodManager...中删除引用?

我尝试过:

A.称onDestroy我的这种方法TabActivity
1. myTabWidget.removeAllViews()
2.myTabWidger.invalidate()

没运气!


memory android memory-leaks android-tabhost

13
推荐指数
1
解决办法
5775
查看次数