레이아웃에 이미지가 (대부분)있는 애플리케이션이 있습니다. 내가 안다시피, 안드로이드는 활동이 더 이상 필요하지 않을 때 기억을 해방하기로되어있다. 따라서 Activity가 onPause()를 수동으로 수행 할 때 내 앱의 레이아웃에서 사용한 Drawables를 공개하지 않습니다. Android에서이 작업을 수행해야합니다.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");
}
를, 메모리 사용량이 증가 (힙 - getTotalPrivateDirty()). 내 응용 프로그램에서 메모리의 모든 kb는 정말 중요하기 때문에 나는 이것을하고 싶지 않습니다. 이 콜백 처리 또한
: 단지 그런Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() {
public void onPictureTaken(byte[] imageData, Camera c) {
}
}
빈. 힙은 10MB에서 20MB로 증가합니다. 100 %. 이게 정상인가? 피하는 법?
을 확인하는 새로운 활동 (간단한)에서 메모리를 확인, 활동의 메모리가 destroyd되면 자동으로 청소 가정 . 문제는 Android가 가비지 수집시기를 정확히 모르는 것입니다. 일시 중지/삭제 된 활동은 메모리가 필요하거나 gc'ed 될 때까지 gc'ed되지 않을 수도 있습니다. 이것을 아는 (쉬운) 방법은 없습니다. – THelper