스마트폰의 설정에서 앱 권한에 어느순간 추가하지 않은 Permission 이 표시되고 있을 때 (선택 권한)

  • AndroidManifest.xml 소스 상에서는 표시되는 권한과 관련된 설정값이 전혀 없음

    <uses-permission android:name="android.permission.INTERNET" />
    ...
  • 프로젝트를 빌드하면 추가한 의존성 및 라이브러리들까지 포함된 Merged Manifest 를 확인 할 수 있음

    • 경로 : app/build/outputs/logs/manifest-merger-debug-report.txt
    • 내용
        uses-permission#android.permission.~~~
        ADDED from [(library or dependency name)] /(~~~local path ~~~)/AndroidManifest.xml:15:5-71
    • 해당 경로의 AndroidManifest.xml 파일 내용을 확인해보면 표시되는 권한을 확인 할 수 있음.
    • 라이브러리 제거로 확인 후 대처.
  • 참고 : https://medium.com/glucosio-project/how-libraries-can-silently-add-permissions-to-your-android-app-620911d7de6c

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

* 당시 답변해 주신 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