0

複雑なレイアウトをプリロードして、最初にアクティビティをよりすばやく表示できるようにする必要があります。

LayoutInflater inflater = (LayoutInflater) mainActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

SlowActivity.cachedView = inflater.inflate(R.layout.activity_layout, null, false);

SlowActivityが開始するとき...

public static View cachedView = null; 

@Override
public void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);
        setContentView(this.cachedView);
      }
}

どこで読んだかわかりませんが、膨張したレイアウトを格納するためにstati変数を使用してメモリリークを実行していると言う人がいます。

なんで?

アクティビティが破棄されたときにリソースを解放する必要があるかもしれません(決して、常にバックグラウンドに置かれます...)

4

2 に答える 2

3

これは、すべてのビューと同様に、レイアウトにそれを保持するアクティビティへの参照があるためです。

したがって、アクティビティが閉じられて解放される必要がある後、静的変数はこのアクティビティを参照するビューへの参照を保持するため、アプリは必要以上のメモリを消費します。

静的変数を使用したキャッシュを回避するために試みる必要がある変数は、ビューだけではありません。この例は、ここに示すように、ドローアブルです

于 2012-07-31T08:35:27.270 に答える
1

Androidは、メモリが必要になるたびにアプリケーション/アクティビティ(静的変数を含む!)を破棄する可能性があるためです。したがって、静的変数を作成するときは、それについて考える必要があります。そうしないと、アプリケーションが非アクティブになった後、奇妙で見つけにくいクラッシュが発生します。

于 2012-07-31T08:35:51.453 に答える