0

私は空の活動をしています。このアクティビティには、単純な Hello World があります。Eclipse で New|Android アプリケーションを使用して作成されました。私が観察したことは、このアプリケーションの dalvik プライベート メモリをダンプすると、アクティビティがリロードされるたびに (方向の変更)、このプロセスの dalvik プライベート メモリが増加することがわかります。以下はログです。これは正しい観察ですか?私にお知らせください

06-06 15:38:38.139: D/hworld(5477): DalvikPM1956
06-06 15:38:41.599: D/hworld(5477): DalvikPM2120
06-06 15:38:43.989: D/hworld(5477): DalvikPM2240
06-06 15:38:45.959: D/hworld(5477): DalvikPM2364
06-06 15:38:47.769: D/hworld(5477): DalvikPM2488
06-06 15:38:49.999: D/hworld(5477): DalvikPM2612
06-06 15:38:51.989: D/hworld(5477): DalvikPM2736
06-06 15:38:54.019: D/hworld(5477): DalvikPM2852
06-06 15:38:55.789: D/hworld(5477): DalvikPM2976
06-06 15:38:57.779: D/hworld(5477): DalvikPM3088
06-06 15:39:04.389: D/hworld(5477): DalvikPM3236
06-06 15:39:09.389: D/hworld(5477): DalvikPM3364
06-06 15:39:10.389: D/hworld(5477): DalvikPM3484
06-06 15:39:11.789: D/hworld(5477): DalvikPM3604

コード

package com.ahw.android_hello_world;

import java.util.Iterator;
import java.util.List;

import android.os.Bundle;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningAppProcessInfo;
import android.content.Context;
import android.util.Log;
import android.view.Menu;

public class MainActivity extends Activity {
    protected Iterator i;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Context context = getApplicationContext();
        ActivityManager manager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
         List<RunningAppProcessInfo> list= manager.getRunningAppProcesses();

     for(i = list.iterator(); i.hasNext(); )
        {
            RunningAppProcessInfo p = (RunningAppProcessInfo)i.next();
            if(p.processName.compareTo("com.ahw.android_hello_world")==0){

                int[] pids = new int[1];
                pids[0] = p.pid;
                ActivityManager activityManager = (ActivityManager)
                        getSystemService(Context.ACTIVITY_SERVICE);

                android.os.Debug.MemoryInfo[] MI = activityManager.getProcessMemoryInfo(pids);

                Log.d("hworld","DalvikPM" + MI[0].dalvikPrivateDirty);
                break;

            }
        }
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

}

更新:::: 少し興味があり、高度なタスク マネージャーでアプリのメモリ使用量を調べたところ、衝撃的な 6.8MB で、向きを変えるだけで 8MB 以上に達しました。一体何のために hello world が 8MB もかかるのでしょうか? モバイル デバイスで ?

4

1 に答える 1

0

デバイスの向きを変更すると、アクティビティが再度リロードされるため、onCreateメソッドが呼び出されます。他のプロセスは解放されていないため、onCreate が呼び出されるたびに新しいプロセスが実行され、これによりメモリが増加します。

于 2013-06-06T10:19:27.090 に答える