阅读本主题后avoiding memory leaks会引起一些疑惑。
如果我需要使用活动上下文(例如:在PopupWindow
类中膨胀视图以显示弹出窗口)我如何保存实际活动的上下文来执行此操作?如果我需要避免静态上下文引用,唯一的方法是在我的类中创建一个属性?所有其他课程我都需要实际的活动环境吗?
更新 -
我想在许多不继承Context的类中使用这个实际的活动上下文,就像我在我的Application类中使用应用程序Context一样,它声明了一个名为getApplicationContext()
的静态方法。此方法遵循Singleton设计模式并且工作正常。
答案 0 :(得分:2)
使用您在评论中链接的代码,为什么不这样做:
//my main activity
public class ExampleStaticReferenceActivity extends Activity {
//...
public void methodCalledWhenUserPressesButton(){
LinearLayout masterLayout = (LinearLayout) findViewById(R.id.masterLayout);
//now passing a reference to the current activity - elevine
masterLayout.addView(ButtonCreator.createButton(this));
}
}
//this class is in another package
public class ButtonCreator {
//added a Context parameter - elevine
public static Button createButton(Context context) {
Button button;
button = new Button(context);
//... some configurations for button
return button;
}
}
答案 1 :(得分:0)
这会使你的应用程序崩溃,因为当你的资源耗尽资源时你的Activity将被杀死因此Context也将为null ..当你想在前景活动中显示弹出时,给它一个后台活动实例毫无意义..博客所说的是避免传递活动。即使是getApplicationContext()也可以完成这项任务。