안드로이드 수석 엔지니어 인터뷰 실제 전투, 안드로이드 개발자 구직 가이드 구직 급여 두 배

머리말

이제 채용 시즌이 시작되었으므로이 기사를 통해 유명 인터넷 기업 면접관의 면접 방법과 경험을 공유하고자합니다.이 기사를 읽으면 프로그래머에게 다른 면접 경험과 감정을주고 면접 정신을 편안하게하고 적극적으로 준비 할 수 있기를 바랍니다. 전투를 위해!

Interviewer : UI 스레드 란 무엇입니까?

A : UI가있는 스레드를 새로 고치는 데 사용됩니다.

면담 자 : 더 이야기

A : UI는 단일 스레드에서 새로 고쳐집니다. 여러 스레드가 UI를 새로 고칠 수있는 경우 UI 스레드인지 여부는 중요하지 않습니다. 단일 스레드의 장점은 모든 위치를 잠글 필요가 없다는 것입니다. UI 프레임 워크 및 스레드 동기화는 간단하고 효과적으로 작성됩니다.

Interviewer : 말씀하신 UI 스레드, 어떤 스레드입니까? 메인 스레드입니까?

A : Activity를 예로 들어 보겠습니다. Activity에서 시간이 많이 걸리는 작업을 비동기 적으로 완료하면 Activity.runOnUiThread 메서드를 호출하여 UI를 새로 고치고 UI 스레드에서 실행할 수 있습니다. 그러면 자연스럽게 UI 스레드가 어떤 스레드인지 알 수 있습니다. 이 방법을 살펴보면.

public final void runOnUiThread(Runnable action) {
    if (Thread.currentThread() != mUiThread) {
        mHandler.post(action);
    } else {
        action.run();
    }
}

이 메서드는 현재 주 스레드에 있는지 아니면 mHandler를 통해 실행하기 위해 주 스레드에 던져 질지 여부를 결정합니다. 이 mHandler의 활동은 new Handler()함께 생성 하기 위해 인수가없는 생성자 의해 생성 된 활동 시간의 전역 변수입니다 .

매개 변수가 없기 때문에 생성시 사용되는 스레드, Handler의 Looper가 사용하는 스레드. 활동은 애플리케이션의 메인 스레드에서 생성되므로 mHandler.post가 실행되는 스레드도 메인 스레드입니다. runOnUiThread 메서드에서 먼저 UI 스레드에 있는지 확인한다고 말씀 드렸습니다.이 mUiThread는 언제 할당됩니까? 대답은 여전히 ​​Activity 소스 코드에 있습니다.

final void attach(Context context, ...) {
 ...省略无关代码
 mUiThread = Thread.currentThread();
}

Activity.attach 메소드에서 mUiThread에 현재 쓰레드를 할당하고 현재 쓰레드는 어떤 쓰레드이며 메인 쓰레드이기도합니다. Activity 생성과 Attach가 모두 메인 쓰레드 인 이유는 또 다른 이야기입니다. 이전 분석을 통해 Activity의 경우 UI 쓰레드가 메인 쓰레드임을 알 수 있습니다.

Interviewer : 결론은 UI 스레드가 메인 스레드라는 것입니까?

A : 이것은 당신이 말한 것입니다. 개발 중에 잘못 될 수는 없지만 충분히 정확하지는 않다는 것을 기억하십시오. 하위 스레드에서 UI를 새로 고치면 예외가 발생합니다.

ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

일반적인 생각은 처음에 View 계층을 생성 한 쓰레드 만이 View를 건드릴 수 있다는 것입니다. 이것은 ViewRootImpl이 생성 된 쓰레드를 의미합니다. 엄밀히 말하면이 쓰레드가 반드시 메인 쓰레드는 아닙니다. 이 시점에서 View.post 메서드를 읽어도 동일한 결론을 얻을 수 있습니다. 따라서 View의 경우 UI 스레드는 ViewRootImpl이 생성 된 스레드이고 Activity의 DecorView에 해당하는 ViewRootImpl이 메인 스레드에 생성됩니다.

면담 자 :이 ViewRootImpl은 언제 생성 되었습니까?

A : Activity가 생성 된 후 애플리케이션의 메인 스레드는 ActivityThread.handleResumeActivity를 호출합니다.이 메소드는 Activity의 DecorView를 현재 생성 된 ViewRootImpl 인 WindowManger에 추가합니다.

Interviewer : 비동기 스레드에서 뷰를 새로 고칠 수 있습니까?

A : 방금 ViewRootImpl에 의해 생성 된 스레드가 뷰를 터치 할 수있는 한 WindowManger.addView가 생성되면 ViewRootImpl이 생성되므로 자식 스레드에서 WindowManger.addView 만 호출하면된다고했습니다. 이 자식 스레드에서 새로 고쳐진이 자식 스레드는이 뷰의 UI 스레드입니다.

Interviewer : 좋아요, 다른 얘기를합시다

미주

Android의 핵심 지식 포인트와 최신 인터뷰 질문, 지식 브레인 맵 및 비디오 데이터 분석을 요약했습니다 .

도움이 필요한 작은 파트너 들의 사적인 메시지 [배움] 나는 당신과 무료로 공유하고 앞으로도 함께 할 수 있기를 바랍니다. (지속적인 지원에 감사드립니다. 필요한 경우 직접 받으십시오)

링크를 직접 클릭하여받을 수도 있습니다!

Android 학습 PDF + 아키텍처 비디오 + 인터뷰 문서 + 소스 노트

한눈에 보는 몇 가지 정보 :

  • PDF Android 학습 핵심 노트 330 페이지 (8 개 섹션 포함)

  • Android 학습 시스템 해당 동영상

  • Android 고급 시스템 해당 학습 자료

  • Android BAT 인터뷰 질문 (분석)

해당 학습 자료 **

[외부 링크 이미지 전송 중 ... (img-n0iPM5Ph-1610954315224)]

  • Android BAT 인터뷰 질문 (분석)

추천

출처blog.csdn.net/fanzhang_vip0723/article/details/112783458