android 인코딩 규범

2663 단어
기본 구성 요소
  • activity.onSaveInstanceState는 activity 생명주기 방법이 아닙니다. 실행을 보장할 수 없습니다. UI 임시 데이터만 저장할 수 있습니다. 데이터 지속화 작업은 onstop이나 onpause 방법에 두어야 합니다
  • intent 점프를 보내기 전에 반드시 안전성 검사를 해야 한다. 적당한 컨트롤을 찾지 못하도록 ActivityNotFoundException
  • 에 보고한다.
  • service.onstartcommand/onbind 방법에서 시간 소모 조작을 피하고 intent 서비스 또는 다른 비동기 조작
  • 으로 변경해야 합니다
  • brodcastReceiver에서 피하세요.onReceive(주 라인에서 작업하면 10s 이상 소모되면 죽임) 및 하위 라인에서 소모 작업을 수행하려면 intent 서비스,handlerThread 등
  • 을 추천합니다.
  • 은식 intent 방송의 민감한 정보를 피하고 응용 내에서localbrodcast 관리자로 제한할 수 있다.sendbrodcast 구현, 안전성과 운행 효율 향상
  • onpause는 시간 소모 조작을 실행하지 않으면 페이지 전환 효율에 영향을 줄 수 있음
  • 동적 등록 BrodCastReceiver 시 register와 unregister가 쌍으로 나타나 유출을 피한다
  • Ui 레이아웃
  • scrollview에listview/gridview/Expandable Listview/recyclerview 등을 소포할 수 없음
  • listview의 모든 item을 메모리에 불러와 커다란 메모리 공간을 소모한다.
  • ListView는 수직 스크롤 기능을 자체로 가지고 scrollview를 감싸지 않아도 된다.
  • 과도한 그리기 감소: 자view와 부view는 배경을 반복하지 않고 레이아웃 등급을 감소
  • 프로세스, 스레드 통신
  • intent가 기초 구성 요소 간에 데이터를 전달하는 데 1MB의 크기 제한이 있고 OOM을 초과할 경우 이벤트버스 대체 방안을 고려할 수 있다
  • 새 루트는 asynctask 또는threadpool을 사용해야 하며, 생성 루트를 표시하지 마십시오
  • 스레드 탱크를 사용하면 스레드 창설과 소각의 시간과 시스템 자원 비용을 줄일 수 있고 익명 스레드는 관리와 분석이 불편하다
  • 라인 명칭은 가능한 한 업무와 관련되어 최적화 분석에 편리하다.
  • 네트워킹과 같은 소모 시간은 운영 스레드에 둘 수 없고 하위 스레드에서 UI를 새로 고칠 수 없음
  • 파일, 데이터베이스
  • 경로 하드코딩을 피하고 내부 또는 외부 저장소 API를 사용하여 디렉터리 작업을 가져와야 합니다(외부 저장소의 가용성을 확인하십시오!)
  •     public File getDir(String alName) {
          File file = new File(Environment.getExternalStoragePublicDirectory(Environm  ent.DIRECTORY_PICTURES), alName);
          if (!file.mkdirs()) {
            Log.e(LOG_TAG, "Directorynotcreated");
          }
          return file;
        }
    
  • 응용 프로그램 간에 FileProvider를 통해 파일을 공유하고 파일 접근 권한을 개방하지 마십시오
  • SharedPreference는 기본 데이터 형식만 저장할 수 있고 복잡한 형식은 파일이나 데이터베이스에 저장해야 한다
  • 빈번하게 조작하면 SP의 apply의 성능은commit보다 우수하다. apply는 먼저 내용을 메모리에 쓴 다음에 마지막으로 비동기적으로 디스크에 수정한다. commit는 디스크에 즉시 쓰고 제출 결과실을 확인해야 commit를 사용하는 것을 추천한다.
  • cursor를 제때에 닫아 메모리 유출을 피하고 다중 루틴 데이터베이스 조작은 사무(sqlite는 데이터베이스 레벨 잠금)
  • 를 사용해야 한다.
  • SQLiteDatabase를 사용하지 마십시오.execSQL, 빈틈 주입을 피하고 sqlitedatabase를 사용하는 것을 권장합니다.insert() 등
  • bitmap, Drawable, 애니메이션
  • 큰 그림이나 여러 장의 그림을 불러옵니다. 메인 라인을 막지 말고 토니핑 압축 png 그림
  • 을 사용하십시오
  • glide를 사용하여view내 이미지 캐시를 하고bitmapfactory를 사용하여 압축하여 OOM
  • 을 피하는 것을 권장합니다
  • activity.onpause와 onstop 방법에서 실행 중인 애니메이션 효과 중단
  • RGB565는 RGB888보다 적은 메모리를 필요로 하지만 투명도를 설정할 수 없음
  • 데이터 보안
  • Android:allowbackup은false
  • 로 설정해야 합니다.
  • 가능한 V2 서명
  • 모든 구성 요소 신중 설정 안드로이드: exported=true
  • log 민감한 정보를 인쇄하지 마십시오
  • 암호화 스푼은 코드에 하드코딩할 수 없으며 역컴파일 방지
  • 좋은 웹페이지 즐겨찾기