1

このトピックを読んでメモリリークを回避すると、いくつかの疑問が生じます。

アクティビティ コンテキストを使用する必要がある場合 (例: クラス内のビューをインフレートしPopupWindowてポップアップを表示する)、実際のアクティビティのコンテキストを保持するにはどうすればよいですか? 静的コンテキスト参照を回避する必要がある場合、それを行う唯一の方法は、クラスに属性を作成することですか? そして、私がそれを行うために必要な実際のアクティビティコンテキストが必要になる他のすべてのクラスは?

アップデート-

Context を継承しない多くのクラスで、この実際のアクティビティ コンテキストを使用したいと考えていますgetApplicationContext()。この方法は、Singleton Design Pattern に従っており、正常に機能します。

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

リソースが不足するとアクティビティがOSによって強制終了されるため、アプリケーションがクラッシュします。したがって、コンテキストもnullになります..そして、フォアグラウンドアクティビティでポップアップを表示したいときに、バックグラウンドアクティビティインスタンスを与えることは無意味です..何ブログによると、getApplicationContext() でさえ仕事をすることができる activity.this を渡すことは避けてください。

于 2012-04-04T11:25:24.087 に答える