어떤 어플리케이션 프로세스가 복잡한 작업으로 인해 과도하게 CPU를 점유하게 되면, 사용자가 다른 어플을 사용하다가 ANR을 만나게 될 가능성이 큽니다. 구글링해본바 CPU 점유율을 낮추기 위한 일반적인 방법은 아래 2가지로 요약됩니다.

1. 쓰레드 우선순위 낮추기
다음 코드를 통해서 쓰레드의 우선순위를 낮춰줍니다.
 
android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_BACKGROUND);

그러나 이미 백그라운드로 실행되도록 작성됐다면 효과는 미지수입니다.


2. 중간중간 쓰레드를 쉬게함
반복적인 계산의 경우 반복작업 사이사이 짧은간격으로 Thread.sleep(milisenconds) 메소드를 이용하여 쓰레드를 쉬게합니다. 
200ms 일하고 100ms 쉬고, 이런식으로 처리 시간은 다소 길어지더라도 사용자가 감내 가능한 최적의 sleep 텀을 찾아냅니다.


* 내용추가(2010/08/23)
3. 구글 동기화 어플에서 사용하는 전략
구글 동기화 어플에서는 현재 CPU 점유율에 따라서 동적으로 작업을 조정해서 처리한다고 합니다. 예들들어, 현재 CPU의 IDLE 상태 비율(즉 놀고있는 비율)을 계산해서 IDLE이 높으면 작업을 많이 처리하고, 낮으면 적게 처리합니다. 그리고 IDLE 비율이 너무 낮으면(다른 프로세스들이 CPU를 많이 쓰고 있으면) 작업을 중단하고 잠시 쉬었다가 다시 시도합니다. 

Posted by 에코지오
,