0
我从Romain Guy读了关于避免Android中的内存泄漏。我明白我必须如何避免画布中的内存泄漏?
使用getApplicationContext()
来避免内存泄漏。无论如何,我的代码如下:
MainMenuActivity.java
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
canvasMenu = new CanvasMainMenu(this);
setContentView(canvasMenu);
}
CanvasMainMenu.java
public class CanvasMainMenu extends View {
private TextView textChallenge;
public CanvasMainMenu(Context context) {
super(context);
textChallenge = null;
textChallenge = new TextView(context);
textChallenge.setTypeface(fontJoan);
textChallenge.setTextColor(Color.WHITE);
textChallenge.setText("99");
textChallenge.measure((int)Define.getScreenWidth(), (int)Define.getScreenHeight());
textChallenge.layout(0, 0, 200, 200);
textChallenge.setTextSize(TypedValue.COMPLEX_UNIT_PX, 20);
textChallenge.setDrawingCacheEnabled(true);
textChallenge.buildDrawingCache();
}
}
我的问题是,如何避免,如果我的代码看起来像这样MEM泄漏。
我必须在MainMenu.java文件中创建static TextView
吗?
有人请解释我,如果我明白错误。
对不起,我在'onDraw()'中使用'textChallenge'来绘制这个文本。当我创建了很多'TextView'。我通过'(Debug.getNativeHeapAllocatedSize()/ 1048576L)'检查了alloc大小,发现当我回到'MainMenu.java'时。每次分配大小都会增加一点点。这就是为什么我认为这是mem泄漏问题。 – barssala 2013-02-27 08:47:01
你说'查看'引用。那是什么?它就像'View','SurfaceView','TextView','Bitmap'。我对吗? – barssala 2013-02-27 09:21:11
@barssala - 是的,从'View'派生的类型的任何变量都是视图引用。静态'View'引用是内存泄漏的常见原因,因为它们保持对活动的引用,并且在静态活动被破坏时不会消失。为了在自定义视图中绘制文本,您应该使用['Layout'](http://developer.android.com/reference/android/text/Layout.html)对象,而不是'TextView'。 – 2013-02-27 16:08:44