私はレイアウトに(ほとんどの)画像を持つアプリケーションを持っています。私が理解するように、Androidはもうアクティビティが必要ないときにメモリを解放するはずです。したがって、私は、アクティビティがonPause()を手動で行ったときに、私のアプリのレイアウトで使用されるDrawableを解放していません。私はAndroidがこれを行う必要があることを理解します。 ( - getTotalPrivateDirty()ヒープ)ごとに作成された活動にAndroid - その他のメモリ関連の問題はありません
{
ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
android.app.ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo();
activityManager.getMemoryInfo(memoryInfo);
Log.i("MEMCHECK", " memoryInfo.availMem " + memoryInfo.availMem + "\n");
Log.i("MEMCHECK", " memoryInfo.lowMemory " + memoryInfo.lowMemory + "\n");
Log.i("MEMCHECK", " memoryInfo.threshold " + memoryInfo.threshold + "\n");
android.os.Debug.MemoryInfo[] memoryInfoArray = activityManager.getProcessMemoryInfo(pids);
for(android.os.Debug.MemoryInfo pidMemoryInfo: memoryInfoArray) {
Log.i("MEMCHECK", " pidMemoryInfo.getTotalPrivateDirty(): " + pidMemoryInfo.getTotalPrivateDirty() + "\n");
Log.i("MEMCHECK", " pidMemoryInfo.getTotalPss(): " + pidMemoryInfo.getTotalPss() + "\n");
Log.i("MEMCHECK", " pidMemoryInfo.getTotalSharedDirty(): " + pidMemoryInfo.getTotalSharedDirty() + "\n");
}
、メモリフットプリントが成長:私はメモリの状態を確認するために、このコードを使用し、
。私のアプリのメモリのすべてのkbは本当に重要なので、私はこれをやりたいとは思わない。このコールバックが処理される。また
、:ちょうどそのようCamera.PictureCallback mPictureCallback = new Camera.PictureCallback() {
public void onPictureTaken(byte[] imageData, Camera c) {
}
}
空、。ヒープは10MBから20MBに拡大します。 100%。これは正常ですか?避ける方法?
を確認するために、新しい活動(簡単なもの)で、あなたのメモリをチェックし、私はチェックのためのあなたのアプローチが有効であるとは思いません。問題は、Androidがガベージコレクトをいつ収集するかを正確には知らないことです。一時停止/破壊されたアクティビティは、メモリが必要になるまでgcできません。またはすぐにgcできます。これを知る(簡単な)方法はありません。 – THelper