1

阅读本主题避免内存泄漏后,会引起一些疑问。

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

更新-

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

4

2 回答 2

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;
        }      

}
于 2012-04-04T21:05:38.457 回答
0

这将使您的应用程序崩溃,因为您的活动将在资源耗尽时被操作系统杀死,因此上下文也将为空。当您想在前台活动中显示弹出窗口时,提供后台活动实例毫无意义.. 什么博客说是避免传递活动。即使 getApplicationContext() 也可以完成这项工作..

于 2012-04-04T11:25:24.087 回答