앱별 네트워크 사용량을 확인하기 위하여 현재 실행되는 앱의 정보를 받아 각각의 uid와 TrafficStats.getUidTxBytes() + TrafficStats.getUidRxBytes()를 사용했습니다.
앱별로 데이터 사용량을 구할수는 있지만, 제 경우 순간 CPU사용량이 약 5%정도 입니다.
혹시 데이터 사용량을 Receiver로 구현할 수는 없나요?
모든 실행중인 앱에 대하여 TrafficStats.getUidTxBytes() + TrafficStats.getUidRxBytes()를 계속 실행해서 속도가 느려진 것 같습니다.
실제로 해당 코드만 빼면 점유율이 0.5%미만으로 떨어집니다.
측정 방법은 초기에 현재 실행중인 앱리스트를 받아 ArrayList에 저장합니다.
이후 업데이트할 때마다 다시 실행중인 앱리스트를 갱신하고
앱리스트의 각 processName과 기존에 ArrayList에 저장한 processName을 비교하여 찾으면 데이터 사용량 변화를 측정하고, 못찾으면 새로 ArrayList에 앱정보를 추가하는 식으로 구현하였습니다.
이때문에 대략 앱리스트 * 앱리스트 만큼의 루프를 돌개 됩니다.
이 부분도 개선하고 싶은데 잘 되지 않네요....
물론 정확히 앱리스트 * 앱리스트만큼은 아닙니다. 검색되면 바로 break로 빠져나오게 하였습니다.
ArrayList에서 데이터베이스 형태로 자료를 검색하여 비교할 수는 없나요?
이게 가능하면 일단 루프수를 줄여 점유율을 줄일 수 있을 것 같습니다.