首先我使用API 10.
我有活动A和活动B.
我从A启动活动B.然后我在B的oncreate()中调用finish()。然后我再次从A启动活动B,依此类推。当我这样做时,我的本机堆每次都会增加大约0.5 MB。
这是我在活动B中唯一的代码。
super.onCreate(savedInstanceState);
getWindow().addFlags(LayoutParams.FLAG_KEEP_SCREEN_ON);
logHeap(); //keeps track of native heap size
setContentView(R.layout.gameplay);
finish();
return;
布局中的位图是否未被回收?我不明白为什么我的原生堆大小会不断增加。
答案 0 :(得分:0)
当您不再需要Bitmap时,应该确保调用bitmap.recycle()。 GC可能需要一段时间才能回收Bitmap。
答案 1 :(得分:0)
找到了大部分内容。
显然是从资产创建
Typeface tf = Typeface.createFromAsset(getAssets(),"fonts/Capture_it.ttf");
不是垃圾收集。
删除它似乎解决了大部分问题。
答案 2 :(得分:-1)
不完全是答案,而是一种获得答案的方法。如果您在Eclipse中使用MAT(http://www.eclipse.org/mat/)并调试您的应用程序,您可能会发现导致应用程序本机堆使用增长的确切原因。
此外:从Eclipse开始,如果您访问DDMS,您可以使用here描述的技术来查看正在增长的对象。