【发布时间】:2014-04-10 14:14:47
【问题描述】:
我花了三天时间来解决这个内存泄漏的问题,但我在任何地方都找不到其他人描述这个问题。这就是为什么我想问是否有人可以确认我没有错过什么。我还提交了错误报告,但我在这里询问 SO(除了让其他人知道)的原因是我希望您让我知道其他视图及其导致此类问题的属性,以便我可以避免它们。
我的问题如下:
(1.) 创建一个简单的 Android 应用程序(例如 SkeletonApp 示例应用程序)
(2.) 在 onCreate() 的末尾添加以下内容以引起内存分配:
Log.i(this.toString(), ">>> onCreate()");
auxList = new ArrayList<int[]>();
for(int i = 0; i < 20; i++) {
auxList.add(new int[250000]);
}
Log.i(this.toString(), "<<< onCreate()");
(3.)(可选 - 只是为了方便)覆盖以下方法:
@Override
protected void onDestroy() {
Log.i(this.toString(), ">>> onDestroy()");
super.onDestroy();
}
@Override
protected void finalize() throws Throwable {
Log.i(this.toString(), ">>> finalize() !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
super.finalize();
}
(4.) 运行应用程序并旋转屏幕几次(按左 CTRL+F11)- 现在一切正常
(5.)在布局(skeleton_activity.xml)中添加:
<TextView
android:id="@+id/textViewDebug"
android:layout_width="30dp"
android:layout_height="32dp"
android:textIsSelectable="true"
/>
(6.) 重复点 (4.) - logCat 显示 Activity 在旋转后被销毁,但从未最终确定,导致多次旋转后出现 OutOfMemory 错误
(7.) 删除 textIsSelectable 属性或将其设置为 false 以及删除 id 属性(即使在保持 textIsSelectable="true" 的同时)可以防止出现问题。
感谢你们的cmets!
PS:我是新来的,无权添加新标签。有足够分数的人可以为这个问题添加一个“textisselectable”标签吗?谢谢
【问题讨论】:
标签: android memory-leaks garbage-collection textview