안녕하세요, 앱 개발을 하다 질문 드립니다.
제작중인 앱이 하나 있습니다. 편의상 (A) 라고 하겠습니다.
이 (A)는 블루투스 통신 및 네트워크 통신을 합니다. 둘 다 동시에 하기도 하구요.
문제는 테스트 케이스 중에 여러가지 다른 앱들을 띄워 놓고
(A)를 B/G 에 놓은 다음 무언가 동작을 하려고 하면 제대로 동작하지 않는다는 점입니다.
저는 당연히 여러 앱들이 실행되면서 LMK가 동작하여 (A)를 OS에서 종료 시켰다고 생각하고 있는데,
근거를 제시하기 위해서 여러 앱들을 띄웠을 때 메모리 상태를 확인해야 하기 되었습니다.
우선 인터넷에서 검색하여 아래와 같은 정보들을 얻을 수 있었는데, 이게 제가 원하는 정보들인지를 모르겠습니다.
ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); MemoryInfo memoryInfo = new ActivityManager.MemoryInfo(); activityManager.getMemoryInfo(memoryInfo); Log.i(TAG, " memoryInfo.availMem " + memoryInfo.availMem); Log.i(TAG, " memoryInfo.lowMemory " + mMemoryInfo.lowMemory); Log.i(TAG, " memoryInfo.threshold " + mMemoryInfo.threshold); Log.i(TAG, " Runtime.getRuntime().maxMemory()); Log.i(TAG, " Runtime.getRuntime().totalMemory());
availMem 이 trashold 보다 작게 되면 lowMemory 가 true가 되고 LMK가 동작하는 것 같은데,
일단 제가 알고 싶은 데이터는 아래와 같습니다.
1) OS 에서 앱 영역이 사용 가능한 전체 메모리 크기 (현재 남아있는 메모리 크기 + 사용중인 메모리 크기)
2) 현재 사용중인 메모리 총 량
3) 현재 수행중인 어플리케이션 별 메모리 점유율
3)번을 확인하기 위해서 역시 인터넷을 참고해서 아래와 같은 메쏘드를 만들었습니다.
private void memoryCheck(int pid) { int pids[] = new int [1]; pids[0] = pid; android.od.Debug.MemoryInfo[] memoryInfoArray = activityManager.getProcessMemoryInfo(pids); for(android.os.Debug.MemoryInfo pidMemoryInfo : memoryInfoArray) { Log.i(TAG, " pidMemoryInfo.getTotalPrivateDirty(): " + pidMemoryInfo.getTotalPrivateDirty() + "\n"); Log.i(TAG, " pidMemoryInfo.getTotalPss(): " + pidMemoryInfo.getTotalPss() + "\n"); Log.i(TAG, " dalvik pss : " + pidMemoryInfo.dalvikPss + "\n"); Log.i(TAG, " pidMemoryInfo.getTotalSharedDirty(): " + pidMemoryInfo.getTotalSharedDirty() + "\n"); } }
문제는 제가 저 private dirty 나 total pss, dalvik pss, shared dirty 가 무엇을 의미하는지 확실히 파악을 못하고 있는데 있습니다.
구글 API 문서를 봐도 정확히는 잘 모르겠더군요.
단순히 사용중인 메모리 크기 얼마 하고 나왔으면 좋겠는데...
다시 질문을 정리하자면 아래 세가지를 알고 싶습니다.
1) 전체 메모리 크기
2) 현재 사용중인 메모리 크기
3) 현재 실행중인 앱 별 메모리 사용량
이걸 알 수 있는 방법 부탁드립니다.
이클립스에서 DDMS에서 해당 정보를 볼 수 있고
adb 명령어로 직접 볼 수도 있고
코드로도 볼 수 있긴합니다. alloc하고 heap이랑 used해서 있었던 것 같은데
테스트 용이라면 이클립스 DDMS 사용이 제일 편할 것 같네요.