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

* 당시 답변해 주신 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 로 구현해야 하는것으로 보임


[안드로이드 AVD 에뮬레이터 관련]


- 안드로이드 개발 도중 에뮬레이터로 테스트해보려고 앱을 빌드하는데 제대로 진행이 안됨.



"Waiting for target device to come online"


위 상황일때....



[일반적인 해결법 몇가지]


1. SDK 툴에서 에뮬레이터 관련, USB 드라이버 를 체크 해제 -> 적용 -> 체크 -> 적용 해서 재설치


2. Invalidate cacjes / restart


3. AVD 에뮬레이터 목록에서 해당 에뮬레이터 wipe data


등등 검색하면 꽤 나옵니다.


[제가 해당했던 상황]


- 출처

https://stackoverflow.com/questions/42757928/waiting-for-target-device-to-come-online-in-android-studio-2-3#


Offical answer; > You can't run software that uses another virtualization technology at the same time that you run the accelerated emulator. For example, VirtualBox, VMWare, and Docker currently use a different virtualization technology, so you can't run them at the same time as the accelerated emulator. emulator-acceleration – volkan Apr 12 '17 at 4:53


* 즉 다른 에뮬레이터 또는 가상화 프로그램 (도커 등)이 실행 중 일때는 동시에 사용할 수 없다.

+ Recent posts