我从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();
}
}
我的问题是,如果我的代码看起来像这样,我怎么能避免内存泄漏。
我是否必须在MainMenu.java文件中创建static TextView
?
如果我理解错误,请解释我。
答案 0 :(得分:0)
为什么你认为这段代码会泄漏内存?关于它的唯一奇怪的事情是在TextView
内使用私有textChallenge
对象(CanvasMainMenu
)。你为什么创造这个?它似乎对你的班级没有任何用处。
解决您的具体问题:通常,创建static
视图引用是内存泄漏的来源,而不是避免它们的方法。除非你绝对必须(非常罕见的情况)并且你知道自己在做什么,否则不要这样做。
对于您的代码,我也没有看到使用应用程序上下文如何帮助解决内存泄漏问题。这通常仅在您需要上下文引用时才有用,该上下文引用将在被销毁和重新创建的活动(例如在设备重新定向之后)后继续存在。