on
조사
PointlessBooleanExpression 바이트코드
to 바이트코드

if문 부터 print 까지 동일한 구조로 컴파일되어
컴파일러가 미리 최적화를 해줌을 알수있었습니다
arraylist for loop
viewrootimpl . setwindowstopped 의 경우
mwindowstoppedcallbacks.size()를 매번 호출
mWindowstoppedcallbacks 는 WindowStoppedcallback의 arraylist
windowstoppedcallback은 인터페이스로 바로위에 정의됨
windowstoppedcallback은 surfaceview의 interface이며
(=surface가 callback의구현)
interface의 함수 windowstopped를 override 구현
updatesurface호출시 surfaceview 객체의 msurface를 release
ㅡㅡ호출
activity의 perforstop 메소드에서
windowmanagerglobal.setstoppedstate 호출시.

에서 root.setwinodwstooped를호출
작동==activity가 stop되었을떄,
activity에 해당하는
window(=viewrootimpl)객체의 view를 render하는
메인renderer thread를 stop한후
메인과 따로도는 surfaceview 의 renderer를
window가 가진 surface갯수 (mwindowstoppedcallbacks.size())
만큼 돌면서 전부 종료
결론== arraylist의 synchronize를위한 코드로보입니다
일단 호출한 메소드에서 synchronize(mlock)을 걸고, 다른 호출진입지점이 없어보이므로
size를 매번구하지 않아도 될거같지만 activity작성 하기에따라 예외가 발생할수도있어보입니다.
그리고 window는 빠르게 화면을 업데이트해야 하는경우 아니면
surfaceview를 사용하지않고 하더라도 많아야 2개를 사용하는점으로보아
최적화를 한다해도 그 영향이 크지않을것으로 보입니다.
다른 size() 함수들도 거의다 arraylist의 concurrency 때문에
이렇게 작성된듯 보입니다.