* 과거 안드로이드 개발 중 경험했던 일입니다.

* 당시 답변해 주신 LG전자 연구원분께 감사드립니다.


- 앱에 추가한 기능 (백그라운드에서 통신하는 기능) 이 정상적으로 실행되지 않음

- AsyncTask 가 실행이 안된것도 아니고, 실패 한것도 아님.

- 첫 생성 부분은 정상 호출 되었으니 실행부가 진행되지 않음

- AsyncTask 가 대기 상태로 기다리는 것으로 보임

- 테스트해보니 기존 실행되고 있던 AsyncTask 작업이 끝나니까 이후 대기중이던 AsyncTask 가 정상 실행되는 것을 확인함



* AsyncTask Thread의 제한은 단말의 CPU 개수와 관련이 있습니다.


- AsyncTask Thread 가 정상적으로 싱행되지 않은 기종은 4개의 CPU 가 있는 기종으로,

해당 N-OS (Android 7.0) 기종들은 아래 Android 소스에 의해서 CORE_POOL_SIZE 가 3 이 됩니다.

해당 pool size의 제한으로 앱에서 여러 개 운용중인 AsyncTask 의 동시 사용이 불가했을 것으로 보입니다.

다른 기종으로 시험을 해보니, 6개의 CPU를 가진 기기의 N-OS 에서는 현상이 발생하지 않았습니다.


<M-OS, AysncTask.java>

int CPU_COUNT = Runtime.getRuntime().availableProcessors();

int CORE_POOL_SIZE = CPU_COUNT + 1;

int MAXIMUM_POOL_SIZE = CPU_COUNT * 2 + 1;


<N-OS, AysncTask.java>

int CPU_COUNT = Runtime.getRuntime().availableProcessors();

int CORE_POOL_SIZE = Math.max(2, Math.min(CPU_COUNT - 1, 4));

int MAXIMUM_POOL_SIZE = CPU_COUNT * 2 + 1;



[결론]

- AsyncTask 는 동시 실행 개수에 제한이 있으므로 소켓통신 등의 시간이 오래걸리는 작업은 기본 Runnable Thread 로 구현을 하고

  자체적으로 금방 끝나는 백그라운드 작업들만 AsyncTask 로 구현해야 하는것으로 보임

+ Recent posts