본문 바로가기
안드로이드

[WindowManager] 윈도우 매니저 개선하기 1

by keel_im 2020. 12. 29.
반응형

졸업 프로젝트로 진행한 안드로이드 프레임워크를 분석 후기(?) 를 차근히 정리를 하려고 합니다.

먼저 저는 프로세스를 (성능 검증 -->빌드--> 포팅) 싸이클을 반복하여 프로젝트를 진행하였습니다.

성능 검증의 경우 지금 WindowManager 관련 클래스를 보고 중첩되는 if - else, 디자인 패턴 변경 가능성
등을 찾아서 코드를 따라가면서 //todo 코멘트를 달면서 진행을 하였습니다. 

force_compile

빌드 의 경우는 클라우드를 사용을 하였습니다. 안드로이드가 어느 정도 버전이 올라가면서 저의 로컬 컴퓨터로는 감당을 하지 못했습니다. 그래서 클라우드 인스턴스를 활용하여 빌드했습니다. (엄청 빠릅니다. putty, scp 많이 써본 것 같습니다.) 또한, 구글 레퍼런스 폰인 PIXEL 1 을 사용하였습니다.

그 이유는 AOSP 및 하드웨어 드라이버가 공개되어 있기 때문입니다. 다른 스마트 폰의 경우 제조자 드라이버를 구하기 힘들 수 있습니다.

포팅 플래싱, 포팅 혼용해서 사용을 하는데 개인적으로 플래싱이라는 말이 입에 붙는 것 같습니다.

빌드 과정을 거치면 이미지 파일이 생성이 되는데 이를 스마트 폰에 입히는 작업입니다. (스크립트 or 명령어) 만 있으면
쉽게 가능합니다.

⚠프로젝트 주의사항⚠

  • 어노테이션을 주의하자. (어노테이션은 라이브러리하고 물려있는 경우가 많습니다.)
  • 구글 레퍼런스 기기 (nexus 시리즈나, pixel 시리즈) 를 활용하는 것이 좋다. 

시작하기

우선 연관되는 클래스를 전부 나열하기
우선 WindowMnager 는 interface 안에도 코드가 있기 때문에 포함을 한다.
todo 로 코멘트 남기면서 진행을 했습니다.

force_compile

PIXEL 기기가 생각 보다 예뻐서 놀랐습니다.

빌드 환경 구성 --> wsl+docker, 클라우드 (알아볼 것), pure Linux 등을 정하는 것이 좋을 것 같다


application side

interface ViewManager

interface WindowManager

class ViewRootImpl

class Window

class WindowContentFraneStats

class WindowManageGlobal

class WindowManagerImpl


server side

interface IWindowManager

interface IWindowSession

interface IWindowSessionCallback

class WindowConfiguration

class WindowHashMap

class WindowList

class WindowManagerDebugConfig

class WindowManagerGlobalLock

class WindowManagerService

class WidwoMangerServiceDumpProto

생각하는 3가지 개선할 수 있는 것 같은 것

force_compile

  1. WindowHashMap --> EnumList 변환

    force_compile
  2. WindowList --> ArrayList 확장 본인 생각은 그냥 queue

    force_compile
  3. Annomymous class -> lambda 메모릭 방지 Runnable 직접 구현한 형태도 많이 보인다.


other section

  1. application --> Object 처리
    server --> WindowManagerGlobalLock (just class) android bp 참조
    force_compile
  2. Generic 이상한 부분 컴파일러는 대단하다.
    force_compile
  3. Math.min 사용안하고 직접 구현
    force_compile
  4. 많은 if else 부분
  5. 불필요한 if --> 바로 inline return
  6. 번외) 텔레스코핑 패턴 (Rect class, WindowManager.LayoutParams)

이러 시나리오로 개선을 하고 실험을 진행을 하고자 합니다. 

참고문헌

 

[Kotlin] 메모리릭 방지하기 | Kotlin, Lambda의 강력함 | Lambda는 진리입니다. : TOAST Meetup

[Kotlin] 메모리릭 방지하기 | Kotlin, Lambda의 강력함 | Lambda는 진리입니다.

meetup.toast.com

🧶 모든 문서는 수정될 수 있습니다

반응형

댓글