2

ケース1:

public class NewEntryActivity 
{

  public void onCreate(Bundle savedInstanceState)
    {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.xxxx);


    //my_button_1 
        my_button_1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            final Dialog dialog = new Dialog(NewEntryActivity.this);

              dialog.setContentView(R.layout.abcabc);

              dialog.show(); 

              // On click of OK button in this dialog it will DISMISS the dialog. ( NOT remove )

            }
            }

    //my_button_2
        my_button_2.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            final Dialog dialog = new Dialog(NewEntryActivity.this);

              dialog.setContentView(R.layout.xyzxyz);

              dialog.show(); 

              // On click of OK button in this dialog it will DISMISS the dialog. ( NOT remove )

            }


            }

    }
}

ケース2:

public class NewEntryActivity 
{

  public void onCreate(Bundle savedInstanceState)
    {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.xxxx);


        final Dialog dialog1 = new Dialog(NewEntryActivity.this);
        final Dialog dialog2 = new Dialog(NewEntryActivity.this);

        dialog1.setContentView(R.layout.abcabc);
        dialog2.setContentView(R.layout.xyzxyz);

        //my_button_1 
        my_button_1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

              dialog1.show(); 

            }
            }

    }


}

CASE 2では、コンテンツビューが設定されたダイアログがすでにあります。ボタンをクリックするだけで表示/非表示になります。

だから私の質問は、最初のケースはメモリを解放しますか、それとも同じ効果がありますか?

4

3 に答える 3

1

これは、特にこのアクティビティでアプリがどれだけのメモリを消費するかに依存しますが、ケース1は適切なようです。

于 2012-10-25T10:37:44.247 に答える
1

Androidのプロセスとメモリ管理は少し珍しいです。Javaや.NETと同様に、Androidは独自のランタイムと仮想マシンを使用してアプリケーションメモリを管理します。これらのフレームワークのいずれかとは異なり、Androidランタイムはプロセスの存続期間も管理します。Androidは、優先度の高いアプリケーションのリソースを解放するために必要に応じてプロセスを停止および強制終了することにより、アプリケーションの応答性を確保します。

各Androidアプリケーションは、独自のDalvikインスタンス内の個別のプロセスで実行され、メモリとプロセス管理のすべての責任をAndroidランタイムに委ねます。これにより、リソースを管理するために必要に応じてプロセスが停止および強制終了されます。

DalvikとAndroidランタイムは、ドライバーやメモリ管理などの低レベルのハードウェア相互作用を処理するLinuxカーネル上にあり、一連のAPIは、基盤となるすべてのサービス、機能、およびハードウェアへのアクセスを提供します。

Dalvik仮想マシンDalvikは、デバイスが複数のインスタンスを効率的に実行できるように最適化されたレジスタベースの仮想マシンです。スレッド化と低レベルのメモリ管理をLinuxカーネルに依存しています。


このスレッドは、Androidのメモリ管理に関する概念を明確にするのに間違いなく役立ちます。 Androidのメモリ割り当てについて詳しく知るための別のリンクがあります

幸運を!

于 2012-10-25T12:40:08.927 に答える
0

そのメモリでオブジェクトを作成するときはいつでも占有します。ケース1は良いです

オブジェクトの数は、作成されるにつれて増加し、ガベージコレクターが実行されるにつれて減少します。

ガベージコレクションを行ってもオブジェクトの数が増え続ける場合は、メモリリークが発生している可能性があります。「hprof」ヒープダンプ(DDMSのボタンをクリックしてトリガーできる場合)は、原因の特定に役立ちます。

ここで、質問自体が答えを保持します。case2の場合、すでにコンテンツビューが設定されているダイアログです。ボタンをクリックするだけで表示/非表示になります。これは、メモリがすでに占有されていることを意味します。

ケース1は良いです。

于 2012-11-05T04:40:34.830 に答える