안녕하세요, 앱 개발을 하다 질문 드립니다.


제작중인 앱이 하나 있습니다. 편의상 (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) 현재 실행중인 앱 별 메모리 사용량 


이걸 알 수 있는 방법 부탁드립니다.