当我需要使用活动上下文时,如何避免静态上下文引用?

时间:2012-04-04 11:21:46

标签: android static android-context

阅读本主题后avoiding memory leaks会引起一些疑惑。

如果我需要使用活动上下文(例如:在PopupWindow类中膨胀视图以显示弹出窗口)我如何保存实际活动的上下文来执行此操作?如果我需要避免静态上下文引用,唯一的方法是在我的类中创建一个属性?所有其他课程我都需要实际的活动环境吗?

更新 -

我想在许多不继承Context的类中使用这个实际的活动上下文,就像我在我的Application类中使用应用程序Context一样,它声明了一个名为getApplicationContext()的静态方法。此方法遵循Singleton设计模式并且工作正常。

2 个答案:

答案 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()也可以完成这项任务。