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