Android 개발에 필요한 코드 요약 Review 목록

7221 단어 Android진급의 길
정리 작업
1. 페이지가 종료될 때 필요한 정리 작업이 완료되었는지 1)handler의removeCallbacksAndMessages(null)를 호출하여handler의 메시지를 비웠는지 여부;2) 완료되지 않은 요청을 취소했는지 여부;3) 페이지에 등록된 감청, 반등록 여부;4) 만약에 자신이 관찰자 모드를 사용한다면 반등록 여부;5) RxJava를 사용한 경우 구독 해지 여부
2. 데이터베이스의 커서가 닫혔는지 여부는 일반인들이 모두 알고 있다. 문제는 다중 루틴이 병발할 때를 고려하지 않은 상황에서cursor가 풀리지 않았다는 것이다.따라서 데이터베이스 작업에는 다음과 같은 상세 코드 블록 동기화가 필요합니다.http://www.2cto.com/kf/201408/329574.html
3. 열린 파일 흐름이 닫혔는지 여부
4. 안드로이드 3.0 이하의 버전은 사용된 비트맵이 Recycle () 를 호출할지 여부입니다. 그렇지 않으면 메모리를 계속 차지할 것입니다. 안드로이드 3.0 및 이상의 버전은 Recycle () 를 호출할 필요가 없습니다. 이 버전의 비트맵은 모두 가상 컴퓨터의 메모리에 넣고 GC가 자동으로 회수하기 때문입니다.
5. WebView에서 destory() 함수를 호출했는지 여부 사용
자신의 코드를 더욱 최적화할 수 있는지 여부
1. 메모리에 저장된 그림을 압축하여 메모리에 저장할지 여부
2. Intent가 너무 많은 데이터를 전달하면 페이지가 너무 느리게 이동할 수 있습니다.너무 큰 데이터는 영구적인 형식을 통해 전달할 수 있는데, 예를 들면 파일을 읽고 쓰는 것이다
3. 같은 파일을 빈번하게 조작하거나 같은 데이터베이스 조작을 실행하는데 정적 변수나 국부 변수의 형식으로 메모리에 저장하는 것을 고려하는지 여부.공간으로 시간을 바꾸다
4. 메인 페이지에 놓인 컨트롤을 ViewStub로 시작 속도를 최적화할 수 있는지 여부
제3자 가방 조심해야 돼요.
1.build.gradle 원격으로 제3자 가방에 의존할 때 버전 번호는 죽도록 쓰십시오. + 번호를 사용하지 마십시오. 새로운 버전의 제3자 가방에 새로운 문제가 도입되지 않도록 합니다.
2. 제3자 프로젝트를 가져올 때 인코딩을 자신의 프로젝트에 현재 사용되고 있는 인코딩으로 변환하는 것을 기억한다.
3. 제3자의 가방이나 JDK 방법을 호출할 때 그들의 원본에 뛰어들어try-catch를 넣을지 말지를 보아야 한다. 그렇지 않으면 자신의 응용 프로그램이 붕괴될 수 있다.
4. 제3자 패키지를 사용할 때 그 혼동 규칙을 추가했는지 여부에 제3자 패키지의 혼동 규칙을 빠뜨리면 제3자 패키지가 혼동하지 말아야 할 코드가 혼동될 수 있다.Debug 버전에서는 문제가 발견되지 않았지만 Release 버전에서는 문제가 발생합니다.
5. 시스템이 so를 추가할 때 펌웨어에 대응하는 안드로이드가 있는지 여부.mk 파일에 새로 추가된 so를 추가합니다. 그렇지 않으면 시스템이 컴파일할 수 없습니다.
@lib/armeabi/libcommon.so 
@lib/armeabi/libabcdefg.so 
쌍으로 나타나야 하는 곳에 주의하시오
1. 시스템의, 자기가 쓴 것, 등록과 반등록 방법, 쌍으로 나타날지 여부
2. 라이프 사이클의 리셋에서 생성되고 삭제된 코드가 대응하는지 여부: onCreate () 에서 Adapter를 만들면 Adapter의 종료 처리 작업 (예를 들어 Image 캐시 비우기) 은 일반적으로 onDestory () 에 써야 하고 onDestoryView () 에 쓰면 안 된다.
유사한 생명주기에 대응하는 코드는 onStart(), onStop()이다.onCreate()、onDestory(); onResume()、onPause(); onCreateView()、onDestoryView()
3. ListView의 item이 재사용되면 Item에서 View 작업이 쌍으로 나타나는지 여부:
switch (type) {
    case ArticleListItem.TYPE_AD:
        ......
        mTitleView.setText(tencentAdBean.title);
        mGreenLabelView.setVisibility(VISIBLE);
        mRedLabelView.setText("");
        mRedLabelView.setVisibility(GONE);
        break;
    case ArticleListItem.TYPE_ARTICLE:
        ......
        mTitleView.setText(mzAdBean.adData.getTitle());
        mGreenLabelView.setVisibility(GONE);
        mRedLabelView.setText("ABC");
        mRedLabelView.setVisibility(VISIBLE);
        break;
}
예를 들어 위의 mTitleView, mGreenLabelView와 mRedLabelView에 대한 조작은 모두 쌍으로 나타난다.그렇지 않으면 ListView가 Item 재사용으로 인해 Item 표시 오류를 일으킬 수 있습니다.
메모리 누설 방지
1. 내부 클래스, 예를 들어Handler,Listener,Callback이 static class가 되는지 여부. 비정상적인 내부 클래스는 외부 클래스의 인용을 가지고 있기 때문이다.
2. 만약에 서브루틴이Activity를 가지고 있다면 리퀘스트의Activity와 같은 약한 인용 형식으로 메모리 유출을 방지해야 한다.
3. Activity를 매개 변수로 전송해야 하는 함수입니다. getapplicationContext () 를 매개 변수로 바꿀 수 있습니까?
Handler 관련
1. View를 사용합니다.post () 에 문제가 있는지 여부입니다. 왜냐하면View가detached 상태에 있는 동안post () 안의 Runnable가 실행되지 않기 때문입니다.이 View가 attached 상태인 경우에만 실행됩니다.
Runnable을 바꾸려면 매번 실행될 것입니다.handler를 사용해야 합니다.post로 대체
2. 만약에 프로그램이 같은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);
기타
1. 어떤 상황에서 어떤 변수가 비어 있는지 많이 생각하고 함수 체내에서 파라미터를 처리하기 전에 반드시 판공문구를 붙여야 한다.
2. 리셋 함수가 리셋 함수를 잘 처리하는지 여부는 문제가 생기기 쉽다.예를 들어 네트워크 요청의 리셋은 이때의 Aciivity 등이 아직 존재하는지 판단하고 다시 호출해야 한다.비동기식 작업으로 인해 Activity가 사라질 수 있습니다.그리고 회수될 수 있는 변수에 대한 공판도 해야 한다.
3. 데이터베이스를 수정한 후 데이터베이스의 버전 번호를 +1으로 할지 여부
4. 타사의 Activity를 시작할 때 Intent가 해석될 수 있는지 여부 판단
Intent sendIntent = new Intent(mContext, Demo.class);
//           
if (sendIntent.resolveActivity(getPackageManager()) != null) {
    startActivity(sendIntent);
}
Activity가 존재하지 않으면 ActivityNotFoundException 예외가 발생합니다
5. 새로 등록된 Activity, Service 또는 Provider, 예를 들어 AndroidManifest.xml에서 exported 속성은true입니다. 보안 문제를 일으킬 수 있는지 고려해야 합니다
<activity android:name="com.inkenka.DemoActivity"
            android:exported="true"/>
exported 속성이true일 때 외부 응용 프로그램이 이Activity를 직접 호출할 수 있기 때문입니다.발생할 수 있는 문제: 1) 외부 응용 프로그램이 상세 정보 페이지를 직접 시작하여 일부 검증 페이지를 직접 돌려보낼 경우 2) 외부 응용 프로그램이 이 Activity에 엉망진창인 Intent를 전달하면 이 응용 프로그램이 붕괴될 수 있습니다.안드로이드의 서비스 거부 빈틈
5. 제수가 0이 아닌 판단을 했는지 여부
6.Activity의 onCreate에서 Popup Window의 show AsLoaction 방법을 사용하지 마십시오.Activity가 아직 불러오지 않았기 때문에 오류가 발생할 수 있습니다
기능 완성 후, 자체 측정 시 검사점
1. 어떤 상황에서 어떤 변수가 빈 지침 문제를 일으킬지 생각한다
2. 휴대폰을 가로로 하고 배치에 버그가 있는지 확인
3. 해상도가 다른 모델에서 배치에 버그가 있는지 확인
4. 영문 등 외국어 글꼴로 전환하여 외국어가 완전하게 표시되는지 확인
5. 낮은 버전에서 업그레이드하면 문제가 없을까요? 예를 들어 데이터베이스가 호환되지 않을 수도 있습니다.
6. Home 키를 누르고 다시 돌아오기
7. 화면을 끄고 켜는 것이 정상인지 여부
8. 다른 앱으로 전환했다가 다시 전환하면 어떨까
9. 휴대폰 개발자 옵션 중'GPU 오버플로팅 디버깅','GPU 오버플로팅 패턴 분석'과'FPS 및 전력 소모 표시'기능을 활용해 자신의 새로운 기능이 오버플로팅, 프레임 디버깅으로 이어질지
10. 부팅 속도에 영향을 미치는지 테스트adb shell am start - W 패키지 이름/activity
11. APK 크기가 커졌는지 비교
12. 몽키 1시간 달리기, 안정성 테스트

좋은 웹페이지 즐겨찾기