0

Androidでのメモリリークの回避についてRomain Guyから読みました。しなければならないことを理解しています

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

私の質問は、コードがこのようになっている場合、メモリリークをどのように回避できるかです。

static TextViewMainMenu.java ファイルに作成する必要がありますか?

私が何か間違っていることを理解したら、誰かが私に説明してください。

4

1 に答える 1

0

このコードがメモリ リークを起こすのはなぜだと思いますか? それについての唯一の奇妙なことは、TextViewあなたtextChallengeCanvasMainMenu. なぜこれを作成するのですか?あなたのクラスでは役に立たないようです。

特定の質問に対処するには: 一般に、staticビュー参照の作成はメモリ リークの原因であり、回避する方法ではありません。絶対にそうしなければならない場合 (非常にまれな状況) と、自分が何をしているのかを知っている場合を除き、実行しないでください。

あなたのコードでは、アプリケーション コンテキストの使用がメモリ リークにどのように役立つかわかりません。これは通常、アクティビティが破棄されて再作成されても存続するコンテキスト参照が必要な場合 (デバイスの向きを変更した後など) にのみ役立ちます。

于 2013-02-27T08:39:40.280 に答える