Android 에서는 ActivityManager로 하여금 프로세스를 제어하는데 이 때 Freeze 라는 프로세스 제어방법이 존재한다.
Freeze는 pid를 바탕으로 프로세스를 멈추는 역할을 진행한다. 내용은 CPU의 점유율 및 부하를 막기위해 설정된 time이 r경과하였음에도 지속적으로 동작하는 process를 cgroup으로 옮기고 freeze하여 CPU의 점유율에서 제외되도록 하는 기능이다.
1. Freeze 정보 확인
adb shell device_config list | findstr activity_manager_native_boot |
위와 같이 명령을 입력하면 use_freezer, time등의 셋업된 값을 볼 수 있다. use_freezer의 경우 프로세스 freeze를 진행하는 모듈동작을 allow해주는 의미를 가지며 time값의 경우 프로세스 freeze작업을 진행하기 위한 트리거 값이된다.
2. Freeze
frameworks/base/core/java/android/os/Process.java
/** * Freeze or unfreeze the specified process. * * @param pid Identifier of the process to freeze or unfreeze. * @param uid Identifier of the user the process is running under. * @param frozen Specify whether to free (true) or unfreeze (false). * * @hide */ public static final native void setProcessFrozen(int pid, int uid, boolean frozen); /** * Enable or disable the freezer. When enable == false all frozen processes are unfrozen, * but aren't removed from the freezer. While in this state, processes can be added or removed * by using setProcessFrozen, but they won't actually be frozen until the freezer is enabled * again. If enable == true the freezer is enabled again, and all processes * in the freezer (including the ones added while the freezer was disabled) are frozen. * * @param enable Specify whether to enable (true) or disable (false) the freezer. * * @hide */ public static final native void enableFreezer(boolean enable); |
Freeze동작을 위한 코든느 위와 같다. 실제 Freeze와 unFreeze를 진행하기위한 API가 setProcessFrozen() 이며
enable의 경우 Freeze기능 자체를 on/off하기 위해 존재하는 API이다.
해당 기능은 Android 11 QPR3 이상버전에서 지원하는 기능이며 process가 갑자기 동작을 하지 않는 것으로 확인할 수 있다.
ps -ef로 검색하면 process자체는 죽지 않고 살아있지만 동작만 안하는 상태로 Freeze상태를 이해하면 될 것 같다.
Freeze기능자체를 on/off하기 위해 아래 명령어를 사용할 수 있다.
|
마지막으로 Freeze가 발생되면 ActivityManager Tag로 Frozon 혹은 Freezing으로 검색해서 로그를 확인할 수 있다.
- ref
https://source.android.com/devices/tech/perf/cached-apps-freezer
'Android > 안드로이드 운영체제' 카테고리의 다른 글
[Android] 키 증명 (0) | 2022.08.17 |
---|---|
[Android] Android cgroup (0) | 2022.06.01 |
[Android] Protected Broadcast (0) | 2022.03.20 |
[Android] 안드로이드(16) - Manifest (0) | 2021.07.31 |
[Android] 안드로이드(15) - bp파일, go파일 (0) | 2021.06.11 |