안드로이드 개발 기반이 강하지 않습니까? Flutter에서 네트워크 이미지 로딩 및 캐싱의 소스 코드 분석, 자세한 기술 소개

머리말

위대한 사람은 이렇게 말했습니다.

책은 인간 진보의 사다리입니다.
에는 황금의 집이 있고 책에는 Yan Ruyu가
있습니다. 독서는 만
권의 책을 깨뜨 렸습니다 . 쓰기에 신이 있다면 그 책은 불멸의 유일한 것입니다.
책은 인류에게 위대한 천재의 유산입니다.

최근 많은 친구들이 제 공식 계정에서 "Android 개발을위한 기본 교과서 및 학습 경로", "Android 개발 입문 자습서에 대한 권장 사항은 무엇입니까?"및 기타 유사한 질문과 같은 유사한 질문을했습니다. 이러한 질문에 계속 답변하고 있습니다. 반복적으로 영감을 얻었 습니다 .2020ndroid 개발 핫북 권장 사항 을 수행하려면  Xiaobai-Android 선임 엔지니어 시리즈 학습 경로 책 소개 아이디어 에서 큰 젖소 개발의 학습 경험을 구성하고 수집하여 우회를 피하고 성장할 수 있습니다. 더 빨리. 이 기사가 초보자를 다루는 모든 사람에게 좋은 답변이되기를 바랍니다.

여기에서 Android 시니어 아키텍트의 고급 지식 시스템 다이어그램을 제공하고 직접 가져 오세요!

다음으로이 길을 따라 소개해 드리겠습니다. 저와 제 주변의 친구들이 좋은 책을 읽었습니다.

이 질문은 저에게 깊은 인상을주었습니다 .. 당연히 처음이었습니다. 당시 저는 한국에있는 삼성에서 취직 기회를 찾기 위해 회사 (지금은 T 사라고 부름)에갔습니다. T 사 면접관은 Bely라는 건축가였습니다. 당연히 Android 개발은 부족한 리소스였습니다. 서비스를 아는 것은 끔찍할 것입니다. 물론 Bely는 나를 당황하게 만들 의도가 없었습니다.), 나는 쉽게 대답했습니다.

서비스는 백그라운드에서 장기 작업을 처리하는 데 특화된 Android 구성 요소이며 UI가 없습니다. startService 및 bindService의 두 가지 시작 방법이 있습니다.

당신은 그것을 맞혔습니다. Bely는 저에게이 두 가지 시작 방법의 차이점을 물었습니다.

StartService 는 서비스를 시작하기 만하고이를 시작하는 구성 요소 (예 : Activity)와 서비스는 연결되지 않으며 서비스가 stopSelf를 호출하거나 다른 구성 요소가 stopService를 호출 할 때만 서비스가 종료됩니다.
bindService 메소드는 서비스를 시작하고 다른 컴포넌트는 서비스의 프록시 객체를 획득하고 콜백을 통해 서비스와 상호 작용할 수 있으며 두 당사자도 바인딩됩니다. 개시자가 폐기되면 서비스는 자동으로 바인딩 해제 작업을 수행합니다. 모든 바인딩이 발견됨 서비스는 unBind가 활성화 된 경우에만 파기됩니다.

이것이 중요한 차이점이되어야합니다 인터뷰 전에 Serivce를 사용하여 음악 플레이어를 만들었습니다. 몇 년 후 심천에있는 많은 사람들을 인터뷰했는데 그중 60-70 %가 서비스 사용 경험이 없었기 때문에 심천시가 Android 개발에 좀 더 성급하다고 느꼈습니다. 여기에는 일자리 기회가 너무 많기 때문에 주니어 개발자는 빠른 성공과 즉각적인 혜택을 더 열망하고 일자리를 찾기 위해 너무 많은 노력을 기울일 필요가 없습니다 (물론 이것은 일방적 인 이해입니다).

물론 두 가지 유형의 호출이 서비스 수명주기 기능에 미치는 영향과 같은 다른 차이점이 있으며 면접관도이 문제에 대해 확장 할 수 있습니다.

Service 사용법을 아는 면접관을 만났는데 몇 년 전부터 startService와 bindService의 차이에 대해 쉽게 대답 할 수있을 때 보통 한 가지 더 질문을합니다.

서비스의 onCreate 콜백 함수에 시간이 많이 걸릴 수 있습니까?

많은 사람들이 이렇게 말할 것입니다. 예.

진실이 밝혀졌고 그의 이전 답변은 인터뷰 전 인터뷰 질문의 미리보기였습니다. 서비스의 onCreate가 기본 스레드 (ActivityThread)에서 호출된다는 것을 알고 있으면 시간이 많이 걸리는 작업으로 인해 UI가 차단됩니다. 일반적으로 다시 묻습니다.

시간이 많이 걸리는 작업을해야한다면 어떻게 하시겠습니까?

사람이 원리를 정말로 이해하고 유연하게 사용할 수 있는지에 대한 질문은 이렇게 전개됩니다. 면접관이 스레드 및 Handler 메서드에 응답하면 상대방에게 다시 질문합니다.

IntentService를 알고 있으며 IntentService를 사용하는 시나리오는 무엇입니까?

이것은 또한 면접관이 봐야 할 것입니다. 실제 프로젝트에서는 개발자가 특정 문제에 대해 어느 정도 깊이를 가지고 있어야하며 전체 Android에 대한 특정 폭의 지식도 있어야합니다. 깊이는 그 사람이 문제를 진지하게 연구하는 정신을 가지고 있음을 의미하고, 폭은 그 사람이 같은 문제에 직면했을 때 다양한 실행 가능한 해결책 중에서 가장 적합한 것을 선택하는 것이 더 쉬울 것임을 의미합니다.

실제 서비스 프로젝트는 많은 사람들에게 무시되어 왔는데, 서비스가 매우 중요하다는 점을 거듭 강조한 이유는 서비스에 대해 전혀 모르면 업무에서 어떤 문제가 발생하는지 살펴 보겠습니다.

시나리오 : 애플리케이션이 인터넷에서 MP3 파일을 다운로드하고 활동에 진행률 표시 줄을 표시하려는 경우 활동을 수행하려면 화면을 켤 수 있어야합니다. 그러면 화면이 전환되면 Actvitiy가 다시 시작됩니다. 다운로드 진행률 표시 줄에 진행률이 올바르게 표시되는지 확인하는 방법은 무엇입니까?

서비스 개념이없는 사람들은 일반적으로 다음과 같은 솔루션을 제시합니다.

  1. 화면을 변경하기 전에 진행 상황을 캐시하고 화면을 변경 한 후 읽어보십시오.
  2. android : configChanges 설정을 사용하여 화면이 전환 될 때 활동이 파괴되고 다시 빌드되는 것을 방지합니다.

첫 번째 계획에서는 진행률 값이 어디에 저장되어 있는지 계속 물어볼 것입니다. 화면을 변경하는 과정에서 Activity 재 구축에 상대적으로 시간이 많이 걸리고 수백 밀리 초 이상 걸릴 수 있음을 알고 있습니다. 그런 다음 다운로드 스레드가 현재 작동 중이며 진행률이 다음과 일치하지 않아야합니다. 저장 중 진행 상황.이 문제를 어떻게 처리합니까??

두 번째 솔루션의 경우 직접 생각할 수 있습니다. 실제 프로젝트에서는 ContentView의 가로 및 세로 레이아웃을 처리하기 위해 몇 가지 추가 작업이 필요할 수 있습니다.

이 문제를 해결하기 위해 서비스를 사용하면 완벽 해 보이지만 나중에 논의 할 활동 (UI)과 서비스 간의 상호 작용이 수반됩니다.

마침내

프로그래머가 승진 할 수 있든 핵심 경쟁력을 향상시킬 수 있든 3 년은 장애물이라고합니다.이 몇 년은 매우 중요합니다.

기술의 급속한 발전으로 우리는 어떤 측면에서 수석 엔지니어 수준에 도달하고 마침내 Android 설계자 / 기술 전문가로 발전 할 수 있습니까? 저는이 5 개의 큰 조각을 요약했습니다.

지난 몇 년 동안 Alibaba, Tencent, ByteDance, Huawei, Xiaomi 및 기타 회사의 인터뷰 질문을 수집하고 분류했으며, 인터뷰의 요구 사항과 기술적 사항을 크고 포괄적 인 "Android Architect"인터뷰 PDF로 분류했습니다. (실제로 많은 에너지를 소비 할 것으로 예상되는 것보다 많음) 지식 컨텍스트 + 지점 세부 정보를 포함합니다.

자바 언어와 원칙,
큰 공장, 작은 공장. Android 인터뷰는 먼저 Java 언어에 익숙한 지 확인하십시오.

고급 UI 및 사용자 정의보기,
사용자 정의보기, Android 개발의 기본 기술.

성능 조정,
데이터 구조 알고리즘, 디자인 패턴. 모든 핵심 토대와 핵심 포인트는 숙련되어야합니다.

NDK 개발;
미래 방향, 높은 연봉이 될 것입니다.

최첨단 기술,
구성 요소 화, 핫 업그레이드, 핫 수리, 프레임 디자인

인터넷에서 안드로이드를 배우는 데 필요한 자료는 많지만 배운 지식이 구조화되어 있지 않고 문제가 생기면 맛보고 심도있는 공부를 그만두면 진정한 기술 향상을 이루기 어렵다. 이 체계적인 기술 시스템이 방향 참조를 제공하기를 바랍니다.

이러한 기술 프레임 워크를 구축 할 때 GitHub에서 볼 수있는 나만의 단편화 된 학습 효과보다 훨씬 더 나은 시스템의 고급 고급 자습서도 분류했습니다. "Android 아키텍처 비디오 + 연구 노트"

물론 이러한 능력을 깊이있게 배우고 습득하는 것은 쉽지 않습니다. 프로그래머로서 배우는 법과 업무 강도는 누구나 알고 있지만, 아무리 바쁘더라도 일주일에 2 시간 씩 공부를해야합니다.

반년 이내에 변경 사항을 확인할 수 있습니다!

디)**

물론 이러한 능력을 깊이있게 배우고 습득하는 것은 쉽지 않습니다. 프로그래머로서 배우는 법과 업무 강도는 누구나 알고 있지만, 아무리 바쁘더라도 일주일에 2 시간 씩 공부를해야합니다.

반년 이내에 변경 사항을 확인할 수 있습니다!

추천

출처blog.csdn.net/fjfdhduuffududu/article/details/112897765