위로 지식! 90 % 안드로이드 개발자들은 안드로이드 개발의 차가운 지식을 모르는

1. YYYY 및 YYYY는 동일하지 않습니다

2019년 12월 31일에서, 예를 들어 :

YYYY-MM-DD : 2019년 12월 31일

YYYY-MM-DD : 2020년 12월 31일

난 당신이 이미 거물급 많은이 문서를 설명하기 위해 구체적으로 작성됩니다 알고 있지만, 직접 공식 설명하여 SimpleDateFormat을 볼 수 있다고 생각합니다.

한마디로 : Y는 주 년을 의미 주의 올해에 속하는 대표, 우리는 1 년 365 일이 Y로 표현된다 사용합니다.

2. getReadableDatabase 열려 있지 읽기 전용 데이터베이스

getWritableDatabase 안드로이드 ()와 getReadableDatabase () 메소드의 SQLiteDatabase 인스턴스를 획득 할 수 있습니다.

그러나 getReadableDatabase ()는 읽기 전용 데이터베이스를 열었지만, 첫 번째 실행 getWritableDatabase () 만 개방 읽기 전용 데이터베이스에 실패 할 경우에없는 ..

소스는 다음과 같습니다 :

public synchronized SQLiteDatabase getReadableDatabase() {
    // ...
    try {
        // 执行 getWritableDatabase() , 若出现异常,以只读方式打开数据库
        return getWritableDatabase();
    } catch (SQLiteException e) {
        if (mName == null) throw e;  
    }
    SQLiteDatabase db = null;
    try {
        // ... 
        // 以只读方式打开数据库
        db = SQLiteDatabase.openDatabase(path, mFactory, SQLiteDatabase.OPEN_READONLY);
        // ... 
        mDatabase = db;
        return mDatabase;
    } finally {
        // ... 
    }
}

3. 아이는 반드시 UI 스레드를 업데이트 할 수 없습니다

다중 스레드 액세스가 안전하지 않을 때 안드로이드 UI가 잠겨 있지 방문하십시오. 따라서, 규정은 UI 스레드에서 UI에 액세스 할 수 있습니다.

스레드를 확인할 책임 checkThread의 ViewRootImpl () 방법은 다음과 같다 :

void checkThread() {
    if (mThread != Thread.currentThread()) {
        throw new CalledFromWrongThreadException(
                "Only the original thread that created a view hierarchy can touch its views.");
    }
}

ViewRootImpl은 onResume에서 만든 후에 그러나, () 콜백. 그래서 onResume ()하기 전에, 그것은 UI를 업데이트 할 수 있습니다 하위 스레드도있다.

ViewRootImpl 만든 후에도, 그들은 checkThread를 호출하지 않습니다 (), 하위 스레드 업데이트는 불평하지 않습니다.

그러나, 우리는 UI 자식 스레드를 개발하거나 업데이트되지 않습니다.

4.보기 코드는 새로운 ID가 아닌

의 + @ 아이디의 방법으로 안드로이드 레이아웃 파일, R은 런타임에 자원의 고유성을 보장하기 위해, 지능의 값에 해당하는 파일에 생성 될 수 있지만 새로운 동적 코드보기없이 ID입니다.

당신의 ID를 사용하려는 경우에는 임의의 숫자와 특정 값이나 필기를 생성하는, ID를 (API17 +)를 생성하는 뷰 generateViewId () 메서드를 호출 할 수 있습니다.

5.보기 반환은 반드시는 getContext 활동하지 않습니다

활동 활동은 특정 된 setContentView에;

여러 가지 방법으로,보기, View.inflate, LayoutInflater.inflate이 새로운보기를 추가함으로써 우리는 대량 참여가 어떤 상황,보기 상황은 무엇이며 설교 할 때.

AppCompatActivity, 다음 getConext 방법보기에서 상속 휴대 전화 시스템 버전 5.0 이하, 활동, 반환은 활동하지만 TintContextWrapper하지 않을 것입니다.

6. 리모트 뷰 RemoteViews와 아무것도보기가

리모트 뷰 RemoteViews는 주로 개발 알림 표시 줄과 바탕 화면 위젯, 프로세스 간 업데이트의 작동을위한 기초를 제공한다.

이름에서, 나는 느낌은 원격보기해야한다. 다음과 같이 실제 사실, 소스 코드는 다음과 같습니다

public class RemoteViews implements Parcelable, Filter {
    // ...
}

모두 모두, 리모트 뷰 RemoteViews는 프로세스 간 컨트롤을 운영하고 수업 방법의 범위를 제공하는 것입니다.

7. 부울 유형은 몇 바이트를 차지

0은 거짓이고, 1 사실에 대한 : 자바 부울의 실제 정보는 하나를 나타냅니다. 그러나, 자바 규격 데이터 형식 문서 정확하게 실제 메모리 사이즈 부울 변수를 정의하지 않는다.

가상 머신과 관련된 그것의 크기는 하나의 비트되지 않을 것이라고 확신 할 수 있습니다.

다음과 같이 Java 가상 머신 권장 사항은 다음과 같습니다 :

  1. 부울 유형 int를 사용하여 컴파일 된 네 개의 바이트이다.
  2. 부울 배열 바이트 배열 유형으로 컴파일 부울 어레이의 각 구성원은 바이트를 차지

8. RecyclerView 레이아웃 파일은 spanCount의 layoutManager 지정할 수 있습니다

RecyclerView 레이아웃 파일은 spanCount의 layoutManager 지정할 수 있습니다

<declare-styleable name="RecyclerView">        
    <attr name="layoutManager" format="string" />
    <attr name="android:orientation" />
    <attr name="spanCount" format="integer"/>
    <attr name="reverseLayout" format="boolean" />
    <attr name="stackFromEnd" format="boolean" />
</declare-styleable>

의의 layoutManager, spanCount, 방향을 지정할 수있는 속성을 ATTR. 우리는 코드를 설정할 필요가 없습니다.

9. 9 패치 이미지의 패딩

NinePatchDrawable 패턴 그것은 뷰 배경으로 사용될 수 신축성 맵이다. 안드로이드는 자동으로 콘텐츠를보기에 맞게 그래픽의 크기를 조정합니다. 추가로 1 개 픽셀의 경계를 포함, 당신은 프로젝트의 고해상도 / 드로어 블 / 사진 디렉토리에 저장됩니다 9.png 확장을 사용해야합니다.

행동의 라인 :

맞춤 이미지 사진의 픽셀을 복사 할 수있는 사용자의 정의 : 왼쪽.

오른쪽, 하단 : 장소 상대적보기 영역은 허용 사진의 내용을 정의합니다.

따라서, 9 패치 이미지는 패딩을 포함 할 수 제어가 명시 적으로 설정되지 않으면, 화상이 패딩 제어 패딩으로서 사용될 것이다.

그래서, 때때로, 안드로이드 : 패딩 = "0dp"를 쓰기도 작성되었습니다.

10. 하드웨어 가속 스위치 수없는 곳

GPU에서 직접 의존하는 하드웨어 가속 그래픽 렌더링 가속 달성했다. 단지 효율성을 개선하지 렌더링 GPU의 도입 이후,하지만 인해 크게 인터페이스 새로 고침 내용 변경의 효율을 향상 도면 메커니즘의 변화에.

시작 Android4.0 하드웨어 가속은 기본적으로 활성화에서 수동 개폐를 제어 할 수 있습니다 :

그 참고 :

윈도우 하드웨어 가속 수준뿐만 아니라 가까운 열 수있는,보기 클래스는 열려 폐쇄하지.

응용 프로그램 및 활동 관리

응용 프로그램 또는 활동 노드는 AndroidManifest를 파일에 추가

android:hardwareAccelerated="true"

창 제어

getWindow().setFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED)

보기 컨트롤

view.setLayerType(View.LAYER_TYPE_SOFTWARE,null);

쿼리 오픈 하드웨어 가속할지 여부

View.isHardwareAccelerated()
Canvas.isHardwareAccelerated()

11. getVisibility () 사용자가 좋지 볼 수 있는지 여부를 결정

getVisibility ()는 자체 만 표시 상태인지 여부를 판정한다. 그러나이 보이지 않으면 부모에게 무엇입니까?

로 isShown () 메소드가 더 적합으로 먼저 판단이 보이지 않는, 현재보기에서 깃발을 결정하고 부모보기를 얻기 위해 반복합니다. 언제 까지나 하나가 표시되지 않는 한, false를 반환합니다.

소스는 다음과 같습니다 :

public boolean isShown() {
    View current = this;
    //noinspection ConstantConditions
    do {
        if ((current.mViewFlags & VISIBILITY_MASK) != VISIBLE) {
            return false;
        }
        ViewParent parent = current.mParent;
        if (parent == null) {
            return false; // We are not attached to the view root
        }
        if (!(parent instanceof View)) {
            return true;
        }
        current = (View) parent;
    } while (current != null);
    return false;
}

지식의 많은 다양한 온라인 거물 블로그에서 온다, 일부는 볼 위치를 잊고, 다시 거물이 또한 경의있다!

또한 당신에게 도움이 있지만,이 문서가 당신이 칭찬 하를 가리킬 수 있기를 바랍니다 경우 ~ ~

내가 마무리의 자신의 컬렉션을 공유 할 수있는 큰 형님이 여기, 당신은 매우 당신이 여기에서 볼 수있는 나에게 감사 안드로이드 아키텍처 PDF + 비디오 + 인터뷰 + 문서 소스 노트 공부 뿐만 아니라 고급 기술 아키텍처 고급 브레인 매핑, 안드로이드 인터뷰 주제 개발 정보 수석 고급 스키마 정보는 이 반복적으로 미세 물질을 읽을 여가 있습니다. 마음의지도에서 각 지점이 실제 프로젝트에 해당하는 주제에 대한 지식을 갖추고, 효과적으로 당신이 지식 포인트를 파악하는 데 도움이 될 수 있습니다.

즉 우리는 고급 학습 향상에 도움 여기에 또한뿐만 아니라, 또한 가까운 친구들이 함께 공부와 공유 할 수 있습니다 당신에게 온라인 검색 데이터를 배울 수있는 시간을 절약 할 수

당신이 필요가있는 경우, 당신은 수있는 댓글 , 나를 따라 , 여기를 클릭 하거나 추가 내지 Vx : 15388039515 (주 CSDN, 필요 정보)

영상

영상

영상

영상

게시 된 200 개 원래 기사 · 원 찬양 83 ·은 70000 +를 볼

추천

출처blog.csdn.net/weixin_45258969/article/details/104783125