팀 Code Review(코드 review 고려 사항)

7315 단어 프로젝트 개발

Code Review 코드 review


주목점

  • 메모리
  • 성능
  • 가독성
  • 서비스 SOLID 원칙
  • 공구.

  • 자동 검출 플러그인을 설치한다. 예를 들어 알리바바그룹 규범
  • 정적 감지
  • 일일 일반 통합, 자동 감지
  • 인위적 리뷰 관심사


    메모리 관련

  • 정리 작업
  • 페이지 종료 시 필요한 정리 작업 완료 여부
  • Handler의removeCallbacksAndMessages(null)를 호출해서Handler의 메시지를 비울지 여부;
  • 아직 완료되지 않은 요청을 취소했는지 여부;
  • 페이지에 등록된 감청, 반등록 여부;
  • 만약에 자신이 관찰자 모드를 사용한다면 반등록 여부;
  • RxJava를 사용했다면 구독 해지 여부;
  • 데이터베이스의 커서가 이미 닫혔는지 일반인들은 모두 알고 있다. 문제는 다중 라인이 병발할 때를 고려하지 않은 상황에서Cursor가 풀리지 않았다는 데 있다.따라서 데이터베이스 작업에는 다음과 같은 상세 코드 블록 동기화가 필요합니다.http://www.2cto.com/kf/201408/329574.html
  • 열린 파일 흐름이 닫혔는지 여부
  • 안드로이드 3.0 이하의 버전은 사용된 비트맵이 Recycle () 를 호출할지 여부입니다. 그렇지 않으면 메모리를 계속 차지할 것입니다. 안드로이드 3.0 이상 버전은 Recycle () 를 호출할 필요가 없습니다. 이 버전의 비트맵은 모두 가상 기기의 메모리에 넣고 GC가 자발적으로 회수할 수 있기 때문입니다.
  • WebView에서 destory () 함수를 호출했는지 여부
  • 내부 클래스, 예를 들어Handler,Listener,Callback이 staticclass가 되는지 여부는 비정상적인 내부 클래스가 외부 클래스의 인용을 가지고 있기 때문이다.
  • 만약에 서브루틴이Activity를 가지고 있다면 리퀘스트 같은Activity를 약인용으로 가지려면 약인용 형식으로 메모리 유출을 방지해야 한다.
  • Activity를 매개 변수로 가져오는 함수를 요구하고 getapplicationContext () 를 매개 변수로 바꿀 수 있는지 여부
  • Handler 관련

  • View를 사용합니다.post () 에 문제가 있는지 여부입니다. 왜냐하면View가detached 상태에 있는 동안post () 안의 Runnable가 실행되지 않기 때문입니다.이 View가 attached 상태인 경우에만 실행됩니다.

  • Runnable을 바꾸려면 매번 실행될 것입니다.handler를 사용해야 합니다.post로 대체
  • 만약에 프로그램이 같은handler에서 같은Runnable를 여러 번 포즈할 수 있다면 매번post하기 전에 이handler에서 실행되지 않은 이Runnable를 비워야 한다. 예를 들어
  • if (mCloudRun != null) {    
        mHandler.removeCallbacks(mCloudRun);    
        mCloudRun = null;
    }
        mCloudRun = new Runnable() {   
             @Override    
             public void run() {        
                CloudAccelerateSwitchRequest request = new CloudAccelerateSwitchRequest(); request.setPriority(RequestTask.PRIORITY_LOW);        RequestQueue.getInstance().addRequest(request);    
                }
            };
        mHandler.post(mCloudRun); 
    

    성능 관련


    자신의 코드를 더욱 최적화할 수 있는지 여부
  • 메모리에 저장된 그림, 압축 처리를 해서 메모리에 저장했는지 여부. 그렇지 않으면 그림의 질이 너무 높아서 OOM
  • 이 발생할 수 있다.
  • Intent가 너무 많은 데이터를 전달하면 페이지가 너무 느리게 이동할 수 있습니다.너무 큰 데이터는 영구적인 형식으로 전달할 수 있다. 예를 들어 읽기 및 쓰기 파일
  • 같은 파일을 빈번하게 조작하거나 같은 데이터베이스 조작을 실행하는데 정적 변수나 국부 변수의 형식으로 메모리에 저장하는 것을 고려하시겠습니까?공간으로 시간 바꾸기
  • 메인 페이지에 놓인 컨트롤을 ViewStub로 시작 속도를 최적화할 수 있는지 여부
  • 제3자 가방 조심해야 돼요.

  • build.gradle 원격으로 제3자 가방에 의존할 때 버전 번호는 죽도록 쓰고 + 번호를 사용하지 마십시오. 새 버전의 제3자 가방에 새로운 문제가 도입되지 않도록 하십시오
  • 제3자 프로젝트를 가져올 때 인코딩을 자신의 프로젝트로 바꾸는 것을 기억하세요
  • 제3자의 가방이나 JDK 방법을 호출할 때 그들의 원본 코드에 뛰어들어try-catch를 넣을지 말지를 보아야 한다. 그렇지 않으면 자신의 응용 프로그램이 붕괴될 수 있다
  • 제3자 패키지를 사용할 때 그 혼동 규칙을 추가했는지 여부와 제3자 패키지의 혼동 규칙을 빠뜨리면 제3자 패키지가 혼동하지 말아야 하는 코드가 혼동될 수 있다.Debug 버전에서는 문제가 발견되지 않았지만 Release 버전에서는 문제가 발생
  • 시스템이 so를 추가할 때 펌웨어에 대응하는 안드로이드가 있는지 여부.mk 파일에 새로 추가된 so를 추가합니다. 그렇지 않으면 시스템이 @lib/armeabi/libcommon을 컴파일하지 못할 수도 있습니다.so @lib/armeabi/libabcdefg.so\

  • 쌍으로 나타나야 하는 곳에 주의하시오

  • 시스템의, 자기가 쓴 것, 등록과 반등록 방법, 쌍으로 나타날지 여부
  • 생명주기의 리셋에서 생성되고 삭제된 코드가 대응하는지 여부: onCreate () 에서 Adapter를 만들었는지 여부. 그러면 Adapter의 종료 처리 작업 (예를 들어 Image 캐시를 비우는 것) 은 일반적으로 onDestory () 에 써야 하고 onDestoryView () 에 쓸 수 없다.

  • 유사한 생명주기에 대응하는 코드는 onStart(), onStop()이다.onCreate()、onDestory(); onResume()、onPause(); onCreateView()、onDestoryView()
  • ListView의item을 복용하면 Item에서View의 조작이 쌍으로 나타나는지 여부, 예를 들어View의 조작은 모두 쌍으로 나타나는지 여부.그렇지 않으면 ListView에서 Item 재사용으로 인해 Item 표시 착란 문제가 발생할 수 있음
  • 기타

  • 어떤 상황에서 어떤 변수가 비어 있는지 많이 생각하고 함수 체내에서 파라미터를 처리하기 전에 반드시 판공문
  • 을 넣어야 한다.
  • 리셋 함수가 리셋 함수를 잘 처리하는지 여부는 문제가 생기기 쉽다.예를 들어 네트워크 요청의 리셋은 이때의 Aciivity 등이 아직 존재하는지 판단하고 다시 호출해야 한다.비동기식 작업으로 인해 Activity가 사라질 수 있습니다.그리고 회수될 수 있는 변수에 대한 공판도 해야 한다.
  • 데이터베이스를 수정한 후 데이터베이스의 버전 번호를 +1
  • 제3자의Activity를 시작할 때 이 Intent가 해석될 수 있는지 여부
  • Intent sendIntent = new Intent(mContext, Demo.class);//이런 방식으로if(sendIntent.resolveActivity(getPackage Manager())가 존재하는지 판단합니다!null) { startActivity(sendIntent);} Activity가 존재하지 않으면 ActivityNotFoundException 예외가 발생합니다
  • Activity, Service 또는 Provider에 새로 등록된 AndroidManifest.xml에서 exported 속성은true입니다. 보안 문제를 일으킬 수 있는지 고려해야 합니다. exported 속성이true일 때 외부 응용 프로그램에서 이Activity를 직접 호출할 수 있기 때문입니다.발생할 수 있는 문제: 1) 외부 응용 프로그램이 상세 정보 페이지를 직접 시작하여 일부 검증 페이지를 직접 돌려보낼 경우 2) 외부 응용 프로그램이 이 Activity에 엉망진창인 Intent를 전달하면 이 응용 프로그램이 붕괴될 수 있습니다.즉 안드로이드의 서비스 거부 빈틈
  • Activity의 onCreate에서 Popup Window의 show AsLoaction 방법을 사용하지 마십시오.Activity가 아직 불러오지 않았기 때문에 오류가 발생
  • 자체 측정 시 체크포인트

  • 어떤 상황에서 어떤 변수가 빈 지침 문제를 일으킬 수 있는지 생각하라
  • 핸드폰을 가로로 하고 Bug이 있는지 확인
  • 해상도가 다른 모델에서 레이아웃에 버그가 있는지 확인
  • 영문 등 외국어 글꼴로 전환하여 외국어가 완전하게 표시되는지 확인
  • 저버전에서 업그레이드하면 문제가 없을까요? 예를 들어 데이터베이스가 호환되지 않는 문제가 발생할 수 있습니다
  • Home 키를 누른 상태에서 정상
  • 화면을 끄고 켜시겠습니까
  • 다른 응용 프로그램으로 전환하고 다시 전환하면 어떻게 됩니까
  • 휴대전화의 개발자 옵션 중'GPU 과도화 디버깅','GPU 구현 모드 분석'과'FPS와 소모량 표시'기능을 이용하여 자신의 새로운 기능이 과도하게 그려질지, 프레임이 떨어질지 확인
  • 부팅 속도에 영향을 미치는지 테스트adb shell am start - W 패키지 이름/Activity
  • APK 크기가 커졌는지 비교
  • Monkey 달리기, 안정성 테스트
  • 좋은 웹페이지 즐겨찾기