on
의심가는부분
성능의심가는 부분들최대한 찾아보기
supresswarnings 관련자료
viewrootimpl.java
@SuppressWarnings(
{
"EmptyCatchBlock", "PointlessBooleanExpression"
}
)
java.lang.SuppressWarning :
어노테이션을 사용하여 컴파일 단위의 서브세트와 관련된
컴파일 경고를 사용하지 않도록 설정할 수 있게 해주는기능.
-여기서는 2가지의 경고를 제외했는데
어떤경우에 뜨는 경고들을 억제하는 것인지 정적 코드 분석 도구 Checkstyle 소스포지 (checkstyle – Checkstyle 8.34) 에서 관련 경고내용이 실려있습니다.
EmptyCatchBlock
// Such empty blocks would be both suppressed:
try {
throw new RuntimeException();
} catch (RuntimeException expected) {
}
try {
throw new RuntimeException();
} catch (RuntimeException ignore) {
}

주석만있거나
빈블럭
주요 클래스에서 약 20개정도 발견할수있었습니다
###### 2.PointlessBooleanExpression 부분
boolean method (string string) {
return string.endswith ("a") == true; // violation
}
boolean method (string string) {
return string.endswith ("a");
}
“a” == true.fasle 등 true.false로 끝나는 의미없는 expression
발생이유는 자동리팩터링 혹은 , 프로그래머가 알아보기쉬우려고 if(boolean == false)꼴로 풀어쓴것
위 코드 최적화시 바이트 코드 5byte를 절약가능하다고 합니다.
viewrootimpl.java ㅡ
private void reportNextDraw() {
if (mReportNextDraw == false) {
drawPending();
}
mReportNextDraw = true;
}

주요 클래스 검색결과 3개의 경우를 발견할수있었습니다
반복문 관련
viewrootimpl.java
private final ArrayList<WindowStoppedCallback> mWindowStoppedCallbacks = new ArrayList<>();
void addWindowStoppedCallback(WindowStoppedCallback c)
{
mWindowStoppedCallbacks.add(c);
}
void removeWindowStoppedCallback(WindowStoppedCallback c)
{
mWindowStoppedCallbacks.remove(c);
}
void setWindowStopped(boolean stopped) {
if (mStopped != stopped) {
mStopped = stopped;
final ThreadedRenderer renderer = mAttachInfo.mThreadedRenderer;
if (renderer != null) {
if (DEBUG_DRAW) Log.d(mTag, "WindowStopped on " + getTitle() + " set to " + mStopped);
renderer.setStopped(mStopped);
}
if (!mStopped) {
scheduleTraversals();
} else {
if (renderer != null) {
renderer.destroyHardwareResources(mView);
}
}
for (int i = 0; i < mWindowStoppedCallbacks.size(); i++) {
mWindowStoppedCallbacks.get(i).windowStopped(stopped);
}
}
}
setWindowStopped이란 메소드의 끝부분 for문에서 .size()를 호출함.
private final ArrayList
public class SurfaceView extends View implements ViewRootImpl.WindowStoppedCallback { //WindowStoppedCallback은 SurfaceView 클래스로 구현됨
``
호출은 windowmanager global
public void setStoppedState(IBinder token, boolean stopped) {
synchronized (mLock) {
int count = mViews.size();
for (int i = 0; i < count; i++) {
if (token == null || mParams.get(i).token == token) {
ViewRootImpl root = mRoots.get(i);
root.setWindowStopped(stopped);
}
}
}
}
ViewRootImple 객체인 mRoot를 돌면서 전부 정지?? .. 정말 필요해서 size를 매번 구하는건지 좀더 파악해야 알수있을것같습니다

view 디렉토리 내 주요 java클래스에서 검색한결과