Sample Course Training – Android Kotlin Development Masterclass on Udemy – Official

알았어 나는 그 도전을 풀어 줘

마지막 순간에 오른쪽으로 주었다 우리가 필요로하는 것부터 시작하는 비디오 할 일은 새로운 것의 왼쪽 가장자리를 제한하는 것입니다 숫자 나는 당신을 클릭 할 것입니다 새 번호로 문자를 보낼 때 알아 그 왼쪽 가장자리를 레이아웃의 왼쪽 가장자리와 오른쪽 가장자리에서 오른쪽 가장자리까지 레이아웃을 사용하여 두 비행기에서 크기를 조정해야합니다

이미 10 일에 복제본으로 설정해야합니다 이 경우입니다하지만 귀하의 개정은 당신이 그들을 변경하고 세 가지를 확실히 설정하고 싶다 상인들은 모두 8 명으로 설정되어 있습니다 그들은 우리가 볼 수있는 것처럼 여기에 설정되어 있습니다

검사관이 마침내 수평 슬라이더를 50으로 설정하십시오 그것은 내 사건에서 이미 다시는 아니지만 작업 텍스트 뷰가 설정되어야합니다 또한 스크롤 내용으로 감싸기 위해 설정됩니다 텍스트보기를 클릭하겠습니다 너는 그것들이 사과를 위해 설정되어 있음을 볼 수있다

핵심 콘텐츠 및 슬라이더가 있어야합니다 50으로 설정하고 왼쪽과 오른쪽으로 오른쪽 여백은 같은 값으로 설정됩니다 지금 우리는 8을 사용하고 있지만 16은 될 것입니다 그것이 단지이기 때문에 지금도 좋아 어느 한 문자를 표시 조금 길어 보일지 모르지만 나는 오른쪽에있는 속성은 텍스트 크기를 18보다 큰 크기로 설정하십시오

SP 및 대담한 버튼을 설정하기 만하면됩니다 아래에 내가 여기 와서 너는 할 수있어 굵은 글씨를 클릭하고 이것을 나로 변경하십시오 18 SP에 언급 그것은 지금 거기에있어 우리는 그 순간 많은 변화를 볼 수 없다 하지만 편집 텍스트 위젯 모두 또한이 텍스트의 18 SP의 텍스트 크기를 사용하십시오 보기가 이제 그 크기에서 더 좋아 보일 것입니다

그것은 꽤 좋아 보이지만 전에는 잊지도 우리와 함께 싱글 허용 음수와 같은 십진수 4 점 5 6 7 지금 편집 우리가 사용했던 텍스트 위젯은 sign을 허용한다 숫자가 아니라 십진수가 아니므로 우리는 내가 그렇게 변화 할 때 에서 결과 위젯을 선택하십시오 여기 오른쪽 입력은 입력 유형입니다 그리고 당신은 그것이 숫자면으로 설정되어 있음을 볼 수 있습니다 이제 우리는 숫자가되기를 원해

십진수 그래서 이걸 클릭 할거야 여기에 줄임표 단추가 있습니다 팝업 메뉴가 뜨면 우리는 KITT를 할 수 있습니다 우리가 내려와서 원하는 옵션 여기에서 십진수를 선택하여 확인란을 선택하고 확인을 클릭합니다 이 두 가지 옵션이 거기에 아무 말도하지 말고 그곳에는 파이프가있다

내가 원하는 숫자 십진수보다 문자 새로운 숫자에 대해 같은 못을하는 것 여기를 클릭하면 줄임표로 소수점 이하 자릿수를 추가하거나 확인하십시오 소수점도 포함되어 있으므로 이제 설정됩니다 두 값 모두에, 그리고 그렇게하지 않으면 버튼 도트를 사용할 수 없습니다 소수점을 입력하십시오 숫자가 하나의 마지막 변경 사항이 있습니다

결과와 텍스트를 만들고 싶다 이제 위젯을 선택합니다 이 소프트 버튼 클릭 앱 실행 키보드가 자동으로 화면에서 편집을 입력하십시오 텍스트 위젯 이제 우리는 어떤 용도로 사용되는지 알고 있습니다 결과 위젯에 입력 할 수 있음 결과를 표시하기위한 것입니다

지금 계산하는 방법의 그 행동이 집중 가능한 속성 그래서 내가 실제로 속성 목록에서를 펼치십시오 아래로 스크롤 여기에서 우리는 초점을 맞출 수 있습니다 터치 모드에서 초점을 두 가지 속성은 모바일 장치 다른 입력 방법을 사용할 수 있습니다 예를 들어 휴대 전화 만 사용할 수 있습니다 터치 모드와 태블릿에서 작동합니다

연결된 실제 키보드가있다 터치 모드가 아닌 경우 실제로 가장 현대적인 Android 휴대 전화 USB 온더 고 (on-the-go) 또는 USB OTG를 지원하여 외장 키보드를 연결할 수 있습니다 및 / 또는 마우스를 사용하면 그들은 실제로 더 이상 연락 할 수 없습니다 모드와 장치가있을 때 터치 모드 위젯은 포커스가 가능하지 않지만 위젯에 대한 예외가 있습니다 텍스트 입력 용으로 설계되었습니다

우리가 필요로하는 텍스트를 편집하십시오 이 두 속성을 false로 설정하십시오 소프트 키보드가 나타나지 않도록 방지 그들이 시도를 사용할 때 위젯이나 외부 마우스로 클릭하기 때문에 나는 여기에 초점을 맞추기 위해 여기에 올 것이다 볼 수있는 드롭 다운을 선택하십시오 그 초점과 실제로 될 것입니다 우리는 진정한 자동을 보여줄뿐입니다

이 경우 실제로는 false를 입력하십시오 false에 입력 한 다음 Enter 키를 누릅니다 그러나 다른 한편으로는 접촉 할 수있는 초점 모드로 클릭하면 나는 단지 조금 더 확장하려고합니다 더 많이 그래서 우리는 그것을 조금 볼 수있다 더 잘 알다시피 나는 터치 모드에있다

내가 실제로 클릭하는 것을 볼 수 있습니다 여기서는 tri-state 체크 박스를 사용하고 있습니다 대시 (dash)의 세 가지 상태 중 하나로 설정할 수 있습니다 기본값으로 설정되어 있음을 의미합니다 이제 진드기가 진실하다는 것을 의미합니다

비어 있으면 허위지만 불행히도 여기에서 볼 수 있듯이 성적으로 성관계에서 작동하지 않습니다 굉장한 실제로 Android Studio 이후 23과 내가 언급 한 방식으로 지금까지 버그는 있지만 당신을 두지 마라 Android Studio에서 레이아웃 디자인은 단지 편리합니다 로드 할 때 입력 할 필요가없는 이 과정의 첫 번째 버전 XML 몇 년 전 그것이 우리가 만든 방법입니다

XML을 입력하여 레이아웃을 일은 분명히 먼 길을왔다 분명히 시간이 지남에 따라 우리의 경우에는 더 좋지만 지금은 무엇을 할 수 있습니까? 이 버그 또는 작업자에 대해 해결 방법은 도구를 올바르게 사용하는 것입니다 대신 지금 당신은 그 사실을 알아 채 셨을 것입니다 이러한 속성 중 일부가 나타나는 것 같습니다 하나의 스패너가있는 버전으로 두 번 또는 옆에있는 미국인의 렌치 한 가지 예가 우리는 내가 붕괴 된 것을 볼 수 있습니다

우리는 텍스트를 가지고 있으므로 스패너 나 렌치로 이걸 가지고있어 하지만 그것들은 같은 이름입니다 공구 속성이며 적용 만 레이아웃 디자이너 내부에서 이것들을 렌치 또는 스패너가 없다 앱을 실행할 때 효과가 있습니다 내가 할 수있는 텍스트에서 무엇을 의미하는지 보여 준다

음력 8 7 6 3 점 5 점을 볼 수 있습니다 그 내용은 실제 결과에서 텍스트 자체 편집 텍스트 내가 실제로 그들을 다시 지우고 오면 여기에있는 텍스트로 스패너 또는 렌치를 선택하고 Enter 키를 누릅니다 여전히 차이는 있지만 여기에 차이가 있습니다 두 번째 전화 번호가 이 두 번째 입력란에는 렌치가 스패너를 앱을 실행할 때 나타납니다 기본적으로 당신을 돕기 위해 시각적으로 잘 표시되므로 실제로 읽는 터치 모드에서 집중 가능 우리가 여기 올 수있는 확장 목록 우리는 실제로이 작은 것을 클릭 할 수 있습니다

스패너를 오른쪽으로하면 너 내가 그 일을 언제 끝났는 지 알 수 있어요 다른 하나를 열었지만 지금은 아래에있다 이 사람은 같은 고통을 겪지 않는다 벌레와 우리가 여기 올 수있어 이것을 클릭하면 작동하는 것을 볼 수 있습니다

지금 체크 박스가 있고 우리는 그것을 거짓으로 만들기 위해 그것을 끄고 싶다 이 사람은 당신이 볼 수있는 것처럼 고통을 겪지 않습니다 같은 버그에서 우리는 할 수있어 티켓과 분명히 있기 때문에 그것은 렌치 또는 스패너 버전이 아닙니다 우리가 달릴 때 어떤 효과가있을거야

응용 프로그램하지만 우리가 할 수있는 일은 여기에 있습니다 볼 수있는 텍스트 탭을 클릭하십시오 연락이 가능한 콜론 도구가 있습니다 내 자신이 거짓과 같아서 나는 바뀔 수있다 그건 안드로이드에 그렇게 다른 말로 와서 여기까지 와서 안드로이드로 바꾼다

여기에 와서 그것을 설정할거야 사실 일 뿐이 었어 다른 기회를 잡을거야 이제 텍스트를 삭제하십시오 우리는 더 이상 필요하지 않기 때문에 모두 지금 당장 우리가 해냈습니다

우리는 우리가 볼 수있는 디자인으로 돌아온다 이제 포커스가있는 체크 박스가 나타납니다 터치 모드가 아닌 첫 번째 터치 모드 하나의 도구 나는 지금 그것을 실제로 다시 똑딱 거리고 이펙트를 끄고 실제로 만들어라 거짓이 그렇게 일하는 빠른 방법입니다 이 특정 버그와 우리가 세 번째로 클릭하면 다시 돌진하고 너는되지 않을 것이다

그것없이 다시 되돌릴 수있다 다시 buuuut 도구를 사용하여 나는 그것을 클릭 할 것입니다 그것은 작동하지 않지만 그때 나는 할 수 없어 똑같은 일이 다시 일어나서 그것의 도구 버전을 다시 디자인으로 텍스트로 바꾸고 도구를 안드로이드로하고 거짓으로 남겨두기 때문에 그게 궁극적으로 우리가 원하는 것입니다 그게 지금 작동하고있어

그러면 내가 할 수있어 이리로 와서 이 시점에서 도구 버전을 사용할 수 있습니다 이제 우리는 집중력과 결과에 대한 터치 모드에서 초점 가능 텍스트를 편집 할 수 있습니다 텍스트 위젯의 새 번호 소프트 키보드 사용 가능 그것으로 원하는 결정의 일종이다 사용자를 만들 때해야합니다 인터페이스는 다른 말로하면 만들지 않습니다

숫자의 입력을 제한하는 감각 우리 버튼에 대해서만 가능합니다 그 대답은 누군가가 외장형 키보드는 아마도 그들이 가진다면 가서 화가났다 화면을 터치하여 집중력이 뛰어난 계산기가 항상 있어야합니다 이 위젯에 대해 확실히 설정해야합니다 새로운 번호 또한 숫자를 허용하기로 결정했습니다

소프트 키보드를 사용하여 입력해야합니다 사용자가 백 스페이스 키를 사용하여 그들이 입력 오류를 해결하기 위해 증명 나도 떠나고 싶어 집중 가능 터치 모드에서 변경없이 초점을 맞 춥니 다 이 위젯의 ​​경우 그리고 원하지 않는 경우 온 스크린 키보드 사용 허용 당신은 그것을 지금 무능하게하는 방법을 알고있다 버튼을 일렬로 정렬하면됩니다

우리가해야 할 일은 삭제하는 것입니다 그런 다음 버튼 7의 왼쪽 구속 조건 새 번호의 왼쪽 가장자리로 설정하십시오 대신 나는 여기에 올거야 7 번에 대해이 제약 조건이 있습니다 우리 자리 7 그리고 그냥 우리의 정상 모드에서 우리는 우리가 왼쪽 구속 조건을 얻었습니다

레이어의 왼쪽 왼쪽 화면이므로 그걸 지우려고하고 그 다음엔 우리는 왼쪽 구속 조건을 설정하기를 원한다 새 번호의 왼쪽 가장자리가된다 대신에 그 일을 진행하겠습니다 그렇게 우리가하고 싶은 또 다른 일은 여백을 변경해야합니다 버튼 7의 왼쪽 여백을 0으로 설정합니다

나는 그 일을 계속할 것입니다 그렇지 않으면 약간의 일이 될 것입니다 당신은 그것이 맞는 것을 알 수 있습니다 이 특별한 이유로 지금은 꽤 멋지다 레이아웃은 우리가해야 할 모든 것입니다

버튼 배열을 실제로 중심에 두지 않았습니다 그러나 자산은 중앙에 있고 너비가 같다 이제 스위치를 켜면 모두 작동합니다 그것이 여전히 보일 것 인 풍경에 대한 배치 앞으로 잘 외국 외국으로 그것은 아니에요 수직으로 좋지만 우리는 다시 올 것이다

그저 우리를 갖는 것보다 이 모양을보기 위해 좋아, 여기 와서 그들이 그것을 볼 수있는 풍경 여전히 괜찮아 보이는군요 수평으로 나는 공정한 괜찮아 언급했다 – 그렇게 좋지 않은 수직 I 실제로 저에게 돌아올 것입니다 완전히 다시 초상화로 돌아 간다 버튼 배열을 다음과 같이 가운데에 정렬하지 않았습니다

우리가 가지고 있기 때문에 나는 거기에서 말했어 4 개의 버튼이 잘 작동하지만 if 우리는 더 많은 버튼 열을 추가했습니다 더 이상 중심에 있지 않을 것이다 나는 그 곳으로 돌아올거야 이 섹션의 끝 부분에서 위젯의 센터 그룹은 지금도 내가 원했던 것이 한 가지 더있다

우리가 쓰기 전에 계속 토론하십시오 지금 계산기의 코드 이전 동영상에서 텍스트를 삭제합니다 코드로 텍스트보기를 쉽게 할 수 있습니다 당신은 보았고 종종 좋은 생각입니다 레이아웃에 텍스트를 남겨 둡니다

수술 중 텍스트를 삭제하겠습니다 그것의 수직을 바꾸려고 노력하십시오 제약 조건에 맞춰서 기준선은 약간 보입니다 그곳의 꼭대기에서 선이 더 높을 때 나는 우리 본문으로 여기 올 것이다 이것이 우리의 운영을위한 것임을 보아라

위젯 우리는 텍스트를 삭제하려고합니다 나는 언급했다 그리고 당신은 그것이 나 거기에 Enter를 누르고 같은 것을 누르십시오 내가 다시 클릭하면 디자인 또는 청사진의 디자인 위젯이 줄어들고 그 이유는 밑줄로 묶인 내용으로 사실 나는 어떤 내용도 없으므로 나는 카테고리 삭제로 시작하려고합니다 수직 구속 조건을 볼 수 있습니다

에서 검사관이 사라졌습니다 권리와 나는 그것을 삭제할 수 있었다 거기 에서뿐만 아니라 사실 지금은 위젯이 너무 작습니다 사용하기가 더 쉬울 것입니다 검사자는 제약 조건을 삭제하지만 우리가 모르겠다

시도하기가 꽤 어려울 수도 있습니다 그리고 거기로 가면 만지면 돼 거기의 기준선 버튼 과정은 지금 나에게 나타난다 위젯의 크기를 조정하거나 텍스트를 넣을 수 있습니다 일시적으로 충분히 넓게 만들어라

나는 XML을 편집 할 수있는 곳이있다 그것이 반드시 필요한 것은 아니지만 다른 방법 텍스트를 넣는 것보다 쉽다 일시적이지만 알아두면 유용합니다 그것에 대해 이제 제약 조건이 속성을 확장 할 수 있습니다 이중 화살표를 사용하여 특성을 나타냅니다

과정에서 사용 해왔다 그럼 내가 확장 할 수있어 제약 조건을 확장 할 수있는 목록의 맨 위로 여기에서 볼 수 있듯이 그 목록이 알파벳순이지만 맨 위에 섞기 위해 사용되었습니다 목록을 만들면 도움이 될 것입니다 조금 더 넓어서 우리가 볼 수있다

이들 모두의 이름은 기본적으로 각 제약의 전체 이름 내가 호위 할 기준선을 원해 이 기준선을 기준선으로 여기에서 지금 기준선 기준선에서 지금 기준선으로 가자 이름은 매우 서술 적이므로 우리는 우리가 겪은 제약을 볼 수 있습니다 이미 설정되어 있으므로 왼쪽 시작이 설정됩니다 여기 레이아웃의 왼쪽에 시작 단계 2 부모 오른쪽 끝에 새로운 것의 왼쪽에 제약이 있었다

번호는 여기에서 볼 수 있습니다 우리가 원하는 빛을 원한다 기준선에 대한 텍스트 뷰의 기준선 새 번호를 입력하면됩니다 알 수있는 ID ID 및 새로운 번호 as – 기준선을 제한하는 위젯 – 그리고 더 쉽게 당신은 단지 새로운 것을 선택합니다 목록의 번호가 여기에 오니 새 번호를 선택하면 볼 수 있습니다 즉시 정렬 곧바로 차고 우리는 그것을 보았다

화면에 그려져있어 새로운 위젯이 도중에 컴포넌트 트리의 맨 아래 그래서 여기서 다시 돌아올거야 더 많은 공간을 만들어라 그래서 그들을 끌어 올릴거야 목록에 일치하는 순서로 표시됩니다 레이아웃의 배치가 정말로 결과 작업이 될 것이고 당신이 될 것입니다

번호는 너무 좋아 풍경은 이제 약간의 모습을 보입니다 당신은 단추가 너무 멀리다는 것을 볼 수있다 화면 하단 사이에는 약간의 공간이 있습니다 위젯을 수직으로 배치하여 시작할 수 있습니다 그들의 상단을 줄임으로써 그들을 뒤섞다

이제 마진은 때때로해야 할 수도 있습니다 하지만 안드로이드는 다른 것을 가지고있다 솔루션을 만들고 서로 다른 화면을위한 별도의 레이아웃 크기 및 가로 수를 세로와 다른 모든 화면 크기 맞아, 지금 비디오를 끝내자 우리가이 버튼들을 다음 동영상에서 너무 가까이 있습니다 그 문제를 해결하기 위해 약간의 시간을 보내라

그래서 이것들이 옳은 것처럼 보입니다 초상화와 풍경 모두에서 인터페이스 모드이므로 다음 동영상에서 보자

Kotlin for Android O Development: From Beginner to Advanced | Course Preview

안녕하십니까, 코르시카에 입사하신 것을 축하드립니다 안녕하세요, 저는 조 피어스입니다

저는 조 피어스 아카데미의 설립자이자 창업자입니다 전 세계의 다른 분야에서 30 만 명이 넘는 학생들을 공부합니다 이제 Kotlen 어학 코스를 통해 추가 선생님 인 Attil과 함께 배우게됩니다 Java Developer 및 CutLine은 놀라운 응용 프로그램을 만드는 데 도움이되는 소프트웨어 작업에 수천 시간 이상을 투자했습니다 이 과정의 이점은 절대적으로 끝이 없습니다! 실제 세계로 번역 할 수있는 기술을 배우게 될 것이며 처음부터 전문적인 프로그램을 만드는 방법을 배울 것입니다

이러한 기술을 활용하여 수백 가지의 응용 프로그램을 만들 수 있습니다 천국이 한계 다! 우리는 당신과 함께하는 것을 매우 자랑스럽게 생각합니다 이제 나는 여분의 시간을 낭비하고 싶지 않습니다, Atel은 당신에게 코스의 다음 비디오에서 모든 것을 가르쳐 줄 것입니다 그리고 나서 시작합니다 우리는 배우는 가장 좋은 방법은 후속 조치와 실제 적용을 통한 학습이라는 것을 믿습니다

우리는 당신이 당신이 안드로이드 애플 리케이션을 만들 수있는 경험에 손을 댈 수있는 몇 가지 다른 예를 보여줄 것입니다 새로운 프로그래밍 언어 : Kotlin, 다시 한 번 감사드립니다 나는 곧 당신을 보려고 기다립니다!

Modern Android development: Android Jetpack, Kotlin, and more (Google I/O 2018)

[음악 재생] 안녕, 안녕 다른 이야기에 오신 것을 환영합니다

현대 Android 개발에 오신 것을 환영합니다 나는 우리가 시작하기 전에, 이 태양은 나보다 훨씬 밝다 그래서 우리는 이것을해야 할 수도 있습니다 그래서 우리는 안경을 끼울 수 있습니다 슬라이드를 보지 않거나 안경을 착용하지 마십시오

그리고 아무것도 보지 마라 그래서 재미있을 것입니다 CHET HAASE : 오늘이 일이 어떻게 진행되는지 살펴 보겠습니다 현대 Android 개발에 오신 것을 환영합니다 나는 안드로이드 툴킷 팀의 Chet Haase입니다

Romain Guy : 저는 Android 프레임 워크 팀의 Romain Guy입니다 뭔가를 내리십시오 CHET HAASE : 그리고 우리는 많은 것들에 대해 이야기 할 것입니다 이미 알고 계시 겠지만 우리에게 일어났습니다 우리가 당신에게 조언과 정보를 어떻게 제공했는지 오래 동안 안드로이드를위한 좋은 앱을 개발할 수 있습니다

그리고 그 정보는 수년에 걸쳐 변했습니다 새로운 기능, 새로운 API, 플랫폼의 새로운 성능, 모든 종류의 것들 그리고 약간 혼란 스럽습니다 정보 검색을 할 수 있습니다 일부 문서 사이트에서도 가능합니다

정말로 정보를 얻지 못한다 현재 많은 상황에 적용됩니다 그래서 우리는 그것을 모두 함께 포장하고 싶었습니다 2018 년에 중요한 일들에 대한 우리의 견해가 있습니다 Android에 대해 생각해보십시오

ROMAIN GUY : 올해 안드로이드는 10 년, Chet가 말했듯이, 시대에 뒤 떨어진 많은 정보가 있습니다 때로는 스택 오버플로에 대한 블로그를보고, 누군가 뭔가에 대해 정말로 화가났다 우리가 10 년 전에 말했던 화 내지 마 괜찮아 모든것은 변한다

상황이 진화합니다 우리가 당신을 싫어하기 때문이 아닙니다 우리가 틀렸기 때문이 아닙니다 그것은 다른 시간 이었기 때문입니다 – 다른 필요, 다른 장치 그래서 우리는 그 중 일부에 대해 이야기 할 것입니다

차이점을 이해하고 있는지 확인하십시오 사물을하는 현대적인 방법 그리고 일을하는 오래된 방법, 우리는 슬라이드에 약간의 힌트가있다 따라서 슬라이드 중 일부는 이와 같이 보일 것입니다 우리가 시작하자 이제 타임 라인을 살펴 봅시다

이것은 일종의 안드로이드 역사입니다 2008 년에 10이 나왔다가 분명히, 우리는 몇 년 동안 많이하지 않았다 [웃음] 나는 거기에서 무슨 일이 일어나고 있는지 모른다 나는 거기에 넣을 것들을 생각할 수 없었다

최적화, 최적화, 최적화 그리고 나서 Android Studio가 나왔습니다 그게 뭐야? ROMAIN GUY : 웹에 따르면, 우리는 나쁜 API를 개발하는 데 바빴다 [웃음] CHET HAASE : 분명히, 그것들은 당신이 원하는 것이 아니 었습니다 그래서 우리는 지난 몇 년 동안 더 잘 해냈습니다

그래서 Android Studio가 나왔고 Eclipse에서 이제 Android Studio에 더 풍부한 기능을 구축했다 우리가 그 당시에 할 수 있었던 것보다 예술이 나왔다 그것은 KitKat에서 기본적으로 꺼졌으며 Lollipop에서만 실행되는 런타임입니다 우리의 권장 사항 중 일부에서 보게 될 것입니다

정말로 변화했기 때문에 거기에서, 시간이 지남에 따라, 우리가 당신을 바라 보는 방식 코드를 작성해야합니다 사전 Dalvik 정보가 꼭 필요하지는 않습니다 예술 세계에 적용한다 Recycler보기가 해제되었습니다 List의 더 나은 버전이기 때문에 중요합니다

더 많은 유연성을 가진보기 그러나 또한 우리는 부품을 출시하기 시작했습니다 연결 라이브러리에서 연결이 끊어졌습니다 플랫폼 릴리즈에서 이 새로운 기능을 사용할 수 있습니다 모든 릴리스에서 애플리케이션에서 네가 신경 써 줬어

잠시 후, 우리는 Constraint Layout Android Studio에 내장되어 있습니다 반대로 실제로 API를 디자인하는 더 풍부한 방법 XML을 직접 타이핑하는 다양한 방법을 제공합니다 코 틀린 – 작년에 나온 것 같아요 나는 모른다 일부 IO 회의 또는 뭔가

아키텍처 구성 요소 – 이는 작년에 발표되었습니다 가을에 10 새로운 일을하는 방식 해결하려고하거나, 적어도 도움을줍니다

안드로이드와 관련된 많은 복잡한 문제들, 커뮤니티로부터 피드백을받는 것 이 API를 사용하여 당신을 쉽게 해줍니다 그것이 전체 목표입니다 Studio Profilers, 훨씬 더 풍부한 방법 성능 측정 항목이 실제로 무엇인지 알아 내기 위해 귀하의 응용 프로그램에 대한 KTx, 나온 확장 라이브러리 몇 달 전에 코 틀린에게 그리고 최근 페이징 라이브러리가 나왔습니다

이번 주에 10을 기록했습니다 그래서 이것은 일종의 일종의 범위입니다 그것은 시간이 지남에 일어났습니다 나는 2008 년과 2013 년 사이에 더 많은 일이있을 것이라고 확신합니다

나는 그것이 무엇인지를 기억할 수 없다 알았어 우리는 도구로 시작할 것입니다 다음은 당신이 알고있는 도구입니다 이 도구 인 Hierarchy Viewer를 얼마나 많이 사용하셨습니까? 오, 꽤 잘됐다

모두는 아니다 그래서 그것은 Hierarchy Viewer라는 도구였습니다 그것은 SDK의 일부입니다 독립형 애플리케이션이었습니다 그 전에 실제로 다른 버전이있었습니다

그게 내가 원래 주말에 쓴 것이 었어 플랫폼을 최적화하기위한 디버깅 도구가 필요했기 때문입니다 그리고 웬일인지, 우리는 SDK에서 그것을 출하하기 시작했다 가장 빠른 도구는 아니 었습니다 그것은 가장 좋은 도구가 아니 었습니다

사실,이 사람은 우습게도, 실제로 자고있는 시간을 많이 보내고있었습니다 그들의 책상에서 그것은 매우 흥미 롭습니다 전에는 그 기술을 전혀 사용하지 않았습니다 그것은 효과가 없었습니다

이제 우리는 그것을 훨씬 더 나은 것으로 대체했습니다 레이아웃 검사기 (Layout Inspector) Android Studio의 일부입니다 좋은 장점 중 하나는 한 번에 여러 검사 훨씬 더 빠릅니다

따라서이 도구를 사용하지 않았다면 사용하십시오 그것은 당신의 계층 구조를 분석하는 매우 쉬운 방법입니다 임베딩 및 마지 닝과 같은 다양한 디버깅, 심지어는 실적이 좋지 않을 수도 있습니다 서로 겹친다 코드를 프로파일 링하는 오래된 방법이 또 하나 있습니다

이것을 추적보기라고합니다 따라서 Trace View는 이미 존재하는 도구입니다 2007 년에 Android 팀에 합류했을 때 주변에있었습니다 꽤 오랫동안 여기에서 우리는 이클립스 내부의 동작을 봅니다

이전에는 독립형 도구였습니다 Trace View에서 우리가 가진 문제점 중 하나는 원래 버전은 계장 된 프로파일 러였습니다 그래서 많은 오버 헤드가있었습니다 그것은 호출 된 모든 메소드에서 실행 중입니다 그것은 해석 모드에서 실행 중이었습니다

그래서 그 숫자를 정말로 믿을 수는 없습니다 그래서이 방법은 3 밀리 초가 걸렸습니다 그건 사실이 아니야 그 방법은 실제로 그것보다 훨씬 빠르다 당신이 할 수있는 유일한 일은 상대 시간을 비교하는 것입니다

다른 방법들 사이 심지어 방법이 네이티브 코드를 호출하면 네이티브 코드가 영향을받지 않습니다 그래서 네이티브 코드를 호출하는 모든 메소드 숫자가 너무 잘못 되었기 때문에 비뚤어졌습니다 수년에 걸쳐 샘플링을 추가했습니다 이 도구에 프로파일 링

하지만 여전히 사용하기가 어려웠습니다 우리 중 몇 명만이 내부적으로 사용하고있었습니다 왜냐하면 그것은 그렇게 위대하지 않았기 때문입니다 몇 년 후 다행히 Systrace를 도입했습니다 따라서 Trace View를 통한 Systrace의 큰 이점 당신에게 포괄적 인 시각을 제공한다는 것입니다

전체 시스템의 추적보기는 얼마나 많은 시간을 알려줍니다 애플리케이션 내부의 모든 코드 라인에 지출하고 있으며, 원래 하지만 때로는 성능 문제 시스템의 다른 곳에서 왔습니다 어쩌면 너는 무언가에 막혔을거야 그것은 다른 과정에 있습니다

그래서 Systrace는 당신에게 필요한 견해를 제공합니다 그 전에 우리는 완전히 눈이 멀었습니다 이제는 새로운 프로파일 러가 있습니다 Android Studio에 도입되었습니다 나는 그들이 3

2 또는 31의 일부라고 생각한다 나는 정말로 기억하지 않는다 그러나 프로파일 러 탭으로 이동하면, 당신은 CPU의 실시간 그래프를 보게 될 것입니다 응용 프로그램과 추억 사용 [INAUDIBLE] 귀하의 응용 프로그램의

그리고 CPU 그래프를 더블 클릭하면, 당신은 그 견해에 도달 할 것입니다 Trace View와 매우 유사합니다 다시 말하지만 훨씬 빠르며 네이티브 코드 프로파일 링, 인스트루멘털 프로파일 링, 샘플링 프로파일 링 및 심지어 Systrace 이것은 지금부터 사용해야 할 도구입니다 이것이이 그래프의 모습입니다

그래서 우리는 이제 4 개의 그래프를 믿습니다 우리는 CPU 1, 메모리 1, 네트워크 1, 에너지 1 내가 네트워크를 사용하지 않아서 무엇을위한 서버인지는 확실하지만 너희들이 그걸 이해하고 그것을 잘 활용할 것입니다 그리고 그것이 마치 CPU 프로파일 러에 들어갑니다 그래서 당신은 화염 그래프를 얻습니다 데이터를 분석하는 여러 가지 방법이 있습니다

제가 좋아하는 것은 화염 그래프입니다 모든 기능을 채색 할 것입니다 서로 다른 색상의 전화 그들이 얼마나 많은 시간을 들여야하는지 붉은 색이나 진한 오렌지색으로 보이는 것들 애플리케이션 내부의 병목 현상입니다 따라서 응용 프로그램 내에서 드릴 다운하는 아주 쉬운 방법입니다

병목 현상을 식별 할 수 있습니다 이것이 네이티브 프로파일 러입니다 Android 80부터 사용할 수 있으며, 그래서 그것을 실행하려면 오레오 이상이 필요합니다 그리고 나는 새로운 메모리 프로파일 러에 대해 간략하게 언급했다

그래서 우리는 메모리 추적을하기 위해 DDMS라는이 도구를 사용합니다 다시 말하지만, 그것은 독립형 도구였습니다 Eclipse 플랫폼에서 빌드되었습니다 그렇지 않기 때문에 사용하기가 정말 어려웠습니다 신분증의 일부

어떤 시점에서 ID에 다시 추가했습니다 그리고 그것은 거의 유일한 좋은 길이었습니다 당신은 당신이 찾고 있는지 여부를 볼 수 있습니다 잘못된 곳에서의 기억 예를 들어, 드로잉을하고 있는지 여부 또는 레이아웃 또는 터치 처리를하고 있는지 여부를 나타냅니다

이제는 Studio의 일부입니다 그래서 당신이 보여주는이 그래프를 볼 때, 실시간으로, 메모리 사용량, 당신 다른 버킷도 볼 수 있습니다 그래서 당신이 얼마나 많은 기억을하는지 말해 줄거야 Java 힙에서 사용하거나 얼마나 많은 기본 메모리 당신이 사용하고있는 그래픽 메모리의 양 따라서 문제의 출처를 정확히 찾아 낼 수 있습니다

화면에서 보듯이 슬라이스를 만들 수도 있습니다 그 시간 동안 모든 할당을 보여줄 것입니다 스택 추적을 볼 수 있으며 참조를 폴드 할 수 있습니다 가장자리 프로파일을 덤프 할 필요가 없습니다 에지 [INAUDIBLE] 사용

jhat을 실행하고 이러한 끔찍한 모양의 웹을 볼 필요가 없습니다 사용하던 UI 아직 모든 일을 처리하지는 못하기 때문에 때때로 jhat에 가야하지만 아주 좋은 방법입니다 기억력이 있다면 시작할 수 있습니다 애플리케이션 내부의 문제

레이아웃 디자인이 이렇게 사용되었습니다 그것은 기사 디자인입니다 흥미로운 이유는 안드로이드가 나왔을 때, 모두에게 XML 로의 전환을 유도하는 것은 매우 어려웠습니다 많은 분노한 개발자를 기억하십시오 UI를 빌드하는 Java 코드를 작성하려고했습니다

그리고 이제, 우리는 당신에게 이것을주었습니다 따라서 이것은 비주얼 레이아웃 비주얼 에디터입니다 이제 화가 많이 들었습니다 누가 시각 도구가 아닌 XML 만 사용하고 싶어하는지 그래서 우리는 단지 새로운 것을 발명해야만한다고 생각합니다

당신이 이것을 사용하기 시작하게하는 미끼로서 CHASE HAASE : 나는 단지 상수라고 생각한다 엔지니어들이 무엇이든 불만 스러울 것입니다 당신이 그들에게주는 새로운 옵션 로망 가이 : 특히 프랑스 인 경우

그리고 도구의 새로운 기능에 대해 이야기하는 경우, 모션 레이아웃을위한 새로운 도구를 살짝 봤습니다 제약 레이아웃을 사용하여 애니메이션을 만들 수 있습니다 Nicola와 John은 다시 그것을 보여줄 것입니다 생각, 내일 또는 목요일 그러니 그 이야기를 찾아보십시오

그래서 우리는이 비주얼 디자이너가 오직 시작 우리가 할 수있는 일은 훨씬 더 많습니다 우리는 아직 모든 것을 구축 할 시간이 없었습니다 그러나이 새로운 모션 레이아웃 편집기는 다음 단계입니다 시각적 인 피드백을 통한 애니메이션 제작 – 실시간 시각적 피드백 – XML을 사용하는 것보다 훨씬 좋음 런타임 및 언어, Chet

잘 지내세요 그래서 달빅 너무 슬퍼하지 마세요 Dalvik은 굉장 했어 그것은 무엇을하도록 설계 되었는가? 공간에 최적화되어 있었습니까? G1이 나왔을 때, 192 메가 였고, 그 중 48 개가 64 세 – 작은 부분이 응용 프로그램에 액세스 할 수있었습니다 CHET HAASE : 매우 적은 양의 메모리 실제로 응용 프로그램에서 사용할 수있었습니다

그래서 Dalvik은 런타임으로, 자체 또는 모든 힙에 대해 많은 메모리를 차지합니다 그리고 물건을 저장해야하는 곳 따라서 장치가 좋아짐에 따라, 기억이 커지면서 반드시 그런 것은 아니었다 도매 방식으로 최적화 할 수있는 능력을 갖추어야한다 우리가 필요했던 것

어떤 시점에서 그들은 기본적으로 시작되었습니다 우리가 말했던 것처럼 Art 런타임의 처음부터, KitKat에서 나왔고 Lollipop에 기본으로 설치되었습니다 그러나 Dalvik 시대에, 우리는 기본적으로 그로부터 나온 권고안을 가지고 있었다 할당과 같은 것들 때문에 정말 비싸다 힙을 걸 으면서이 물건을 넣을 장소를 찾아야했습니다

그리고 힙은 시간이 지남에 따라 파편화되었다 그것은 비록 그것이 많은 공간을 거기에서 가지고 있었다고해도, 그것은 연속적으로 많은 공간을 가질 필요는 없었습니다 그 물건을 넣을 장소를 찾으러 그리고 컬렉션도 정말 비쌌습니다 결국 당신은 시간이 지남에 따라 물건을 배정 할 것입니다

그리고 나서 결국 기억을 잃을 것입니다 그리고 그렇게 할 때 – 당신이 애니메이션의 중간에있을 때, 당신은 UI 스레드를 사용하고 있습니다 비트 맵을위한 공간을 할당해야합니다 공간을 찾을 수 없으므로 GC를 더 잘 실행하십시오 아마 2 ~ 3 개의 프레임을 잃을 것입니다

Dalvik은 실제로 모든 항목을 수집해야했기 때문에 더 이상 참조없이 그래서 우리가 가진 권고 중 일부는 기본적으로 가능할 때마다 물건을 할당하지 마십시오 그것은 틀림없이 우리가 프레임 워크 안에서 삶을 살아가는 방법입니다 우리는 당신의 내적 루프이기 때문에 응용 프로그램 개발자가 그렇게하는 것이 좋습니다 내가 생각하는 권고 중 하나 지역 사회는 타격을 본 적이있다

열거 형을 사용하지 않았습니까? 열거 형 구조가 밝혀 졌기 때문에 – 클래스 구조체는 int 객체보다 훨씬 큽니다 권리? 그리고 우리는 ints를 온통 사용합니다 메모리 양을 최소화하려고하기 때문에 우리는 또한 시간을 최소화하려고 노력한다 우리는 새로운 객체를 만들고 있습니다 원시 타입을 전달하는 것

우리는 또한 원시 타입이 멋지다고 말했다 침대는 시원하고, 수레는 시원합니다 대문자 I 정수, 그렇게 차갑지 않다 또한 차가운 것이 오토 박싱입니다 표준 콜렉션 클래스를 사용할 때, 이 정보에 많은 정보가 저장되어 있다면 원시 타입과 그것들은 autoboxed in and out되고 있습니다

또는 다른 패턴과 접근 방식을 사용하는 경우 이러한 것들을 객체로 생성하게하고, 너는 우리가 가진 도구에서 볼 수있다 그 시간에, 너는 오토 박싱과 즉석 배정 그리고 결국에는 GC가 시작됩니다 너는 조금 더 싫어한다 현대 세계에서 우리는 이제 예술을 가지고 있습니다

성능에 최적화되어 있습니다 그것은 메모리 최적화를 위해 처음부터 만들어졌지만, 성능을 위해 최적화 할 수 있습니다 그리고 이것은 메서드 호출 항목 측면에서 성능입니다 할당 및 컬렉션에 최적화되어 있습니다 빠른 할당 및 수집 몇 가지 이유가 있습니다

그 중 하나는 대형 물체를 위해 별도로 마련된 것입니다 그래서 모든 것을 같은 힙에 놓는 대신에, 큰 물체를위한 공간을 찾아야 만한다 모든 작은 것들 중에, 그것은 모든 비트 맵을 넣습니다 별도의 힙에 모든 큰 개체가 전체적으로 표시됩니다 큰 오브젝트를위한 공간을 찾는 것이 더 쉽습니다

그러면 작은 개체가 별도의 힙에 들어갑니다 또한, 정말 멋지다, 그것은 조각 모음을 할 수 있습니다 Dalvik은 조각 모음을 할 수 없으므로 시간이 지남에 따라 할당됩니다 결국에는 충분한 공간이 없었습니다 당신이 필요로하는 것을 위해서

그래서 당신은이 애매한 오류 메시지를 얻을 것입니다 그곳에는 메가 바이트가 없기 때문에 단지 48 메가 바이트 무료 당신이 깨닫기 전까지는 많은 의미를 갖지 않습니다 아마도 힙이 조각난 것 같습니다 우리는 그것에 대해 많은 것을 할 수 없습니다

이제 할 수 있습니다 Art에서는 힙을 조각 모음합니다 이전 릴리스에서는 응용 프로그램이 조각 모음을 수행 할 때 조각 모음을 수행했습니다 백그라운드에 있었다 이제 응용 프로그램이 실제로 조각 모음을 수행 할 수 있습니다

뿐만 아니라 전경에 있습니다 그래서 더 좋은 방법 이제 우리가 가진 권고 사항은 필요한 경우 할당하고 할당하십시오 괜찮아 사실 열거 형을 사용하면 걱정하지 않습니다

어서 [CHEERING] 분명히, 당신은 돌보아, 그래서 당신이 그들을 즐기시기 바랍니다 우리는 여전히 원칙적으로 사용하지 않는 경향이 있습니다 많은 프레임 워크 코드와 API에서 로망 가이 : 나는 그것을 사용한다 CHET HAASE : 그들은 때때로 거기에있다

그러나 내가 말했던 것처럼, 우리는 여전히 내부 루프입니다 그래서 우리는 더 보수적 인 경향이 있습니다 반드시 애플리케이션 코드에 있어야합니다 적절한 유형을 사용하십시오 나는 여전히 원시적 인 타입이 정말로 멋지다고 생각한다

하지만 그걸 알아? 오브젝트 유형이있는] 렉션을 사용해야하는 경우에는 정상입니다 그러나이 휴대 전화는 여전히 제약이있는 기기라는 점에 유의하십시오 메모리는 48 또는 64 메가 사용할 수 없습니다, 하지만 다른 모든 것들과 여전히 공유되고 있습니다 사용, 해당 시스템에서 실행 중 또한 배터리는 정말 중요합니다

배터리를 사용하는 것이 중요합니다 가능한 한 오랫동안 언제나 끊임없이 일을하고 있다면 만약 당신이 끊임없이 쓰레기를 만들고 그것을 모으고 있다면, 아트는 훨씬 빠릅니다 그러나 예술은 여전히 ​​실제로 작업을해야합니다 할당하고 수집하고, 모든 것들은 힘을 사용합니다

따라서 배터리가 전력을 사용한다는 것을 기억하는 것이 좋습니다 어쩌면 네가 보수적 인 태도로 너는하려고하는거야 또한 프레임 워크처럼 내부 루프를 인식해야합니다 병목 현상 단단한 루프에서 일을하지 마십시오

성능에 문제가 발생할 수 있습니다 ROMAIN GUY : 안드로이드가 시작되었을 때, 팀은 자바 프로그래밍 언어 응용 프로그램을 만들려면 그 많은 이유가있었습니다 주요한 것은 매우 인기있는 언어였습니다 수백만 명의 개발자가 이 언어를 사용하는 방법을 알고있었습니다 훌륭하고 자유로운 도구가 많이있었습니다

따라서 빠른 채택을 위해 정말 도움이되었습니다 Android 플랫폼의 시간이 지남에 따라, 우리는 때때로, 새 버전의 언어를 채택하는 데 약간의 시간이 걸립니다 우리는 최근 자바 프로그래밍 언어 버전 18 나는 그들이 1

10에 달하고 있다고 생각한다 그러나 그것은 수년 동안 우리를 섬겼습니다 작년에 다행히도 우리는 완전한 지원을 발표했습니다 Kotlin 프로그래밍 언어 용 얼마나 많은 사람들이 지금 그것을 사용하고 있습니까? [CHEERING] 괜찮아

CHASE HAASE : 그들을 지켜라 하나 둘 셋 넷 ROMAIN GUY : 거의 모두 5 번 이상 이었어 로망 가이 : 우리는 몇 가지 슬라이드를 유지할 것입니다

그래서 우리는 작년에 그것을 2017 년에 발표했습니다 우리는 JetBrains와 긴밀히 협력하고 있습니다 우리는 도구가 Kotlin과 잘 작동하는지 확인합니다 우리가 필요한 기능에 액세스 할 수 있는지 확인하십시오 전반적으로, 우리는 그것을 좋아하기 때문에 코드를 읽고 쓰기가 더 즐겁다

우리는 코드를 읽고 쓰는 데 너무 많은 시간을 소비합니다 그건 중요합니다 여기에 몇 가지 예가 있습니다 그들은 읽기가 어려울 것입니다 그러나 여러분 모두가 Kotlin을 작성하는 방법을 알고 있기 때문에 괜찮습니다

이러한 예제는 Kotlin 확장에서 가져온 것입니다 그래서 나는 그들을 정말로 빨리 지나갈 것이다 나는 명명 된 매개 변수를 좋아한다 메소드의 오버로드를 여러 개 만들 필요가 없습니다 또는 빌더 모든 시간

정말 유용한 인라인 함수를 사용할 수 있습니다 확장 프로그램을 만들 때 또는 그래픽을 만들 때도 코드, 예를 들면 우린 그걸 봤어 연산자 운영자에게 과부하가 걸릴 수 있습니다

당신은 그것에 조심해야합니다 이 문제를 상당히 악용 할 수 있습니다 일단 X로 불리는 고정 연산자를 만들었습니다 왜냐하면 그것은 벡터에 대한 교차 곱처럼 보이기 때문입니다 그러지 마

그것은 끔찍한 생각입니다 나는 끔찍한 생각이기 때문에 그것을 GitHub에 넣었습니다 소멸 할당을 할 수 있습니다 따라서 POJO가 있으면 컴포넌트 1, 2, 3 등으로 불리는 메소드 그런 다음 여러 개의 과제를 수행 할 수 있습니다

한 줄의 코드로 이것은 Android KTx의 예입니다 우리는 정수를 파기합니다 따라서 이동 및 마스킹을 수행 할 필요가 없습니다 바이트와 ​​정수의 데이터 클래스가 있습니다

모든 게터와 두 개의 문자열을 만드는 매우 쉬운 방법 같음 및 해시 코드 그래서 당신은 할 필요가 없습니다 IntelliJ에 알려주기 위해 바로 가기를 입력해야합니다 그것은 우리가 저지르는 게으름의 수준입니다 Kotlin에 도달했습니다 그래서 환상적입니다

그리고 마지막으로 그렇습니다 나는 그저 나에게, 내가 할 수있는 일을 부르고 싶었다 너무 매력적 Kotlin은 매우 영리하다 그들이 언어로 내린 의사 결정 그리고 그들 중 하나는, 예를 들면, lambda가 함수의 마지막 매개 변수 일 때, 그들은이 특별한 구문을 사용할 수 있습니다 너는 람다를 통과 할 필요가 없다

함수에 대한 매개 변수로 중괄호를 열 수 있습니다 바로 코드를 입력하십시오 외모와 느낌이 훨씬 자연 스럽습니다 우리가 새로운 것을 디자인 할 때 지금하고있는 일 중 하나입니다

플랫폼의 API – Android P로 시작 – 우리는 Java API가 이러한 규칙으로 가득 차 있음을 확인합니다 단일 추상 메소드 인터페이스가있을 때, 우리는 인터페이스를 사용하는 매개 변수 매개 변수 목록의 끝 부분에있다 Kotlin 개발자가 이익을 얻을 수 있도록 언어의이 특정 기능에서 그리고 우리는 점점 더 많은 것을 할 것입니다 지원 라이브러리 및 향후 API에 대한 정보를 제공합니다 그래서 아직 Kotlin을 사용하지 않는 당신들에게는, 프로젝트에는 Kotlin과 Java가 모두 포함될 수 있습니다

모든 신청서를 Kotlin으로 전환 할 필요는 없습니다 응용 프로그램에 추가하는 다음 클래스는 Kotlin, 또는 기존 클래스를 변환 할 수 있습니다 우리는 1 톤의 린트 수표를 가지고 있습니다 누락 된 것이 있으면 Tor에게 알려주십시오 그것은 당신 앞에서 꽤 많이 쓸 것입니다

그리고 바로 저지하십시오 보푸라기 수표를 쓸 때 일종의 기계입니다 Android 확장 프로그램을 확인하십시오 다시 한번 Jake Wharton의 이야기가 있습니다 나는 목요일 아침에 그것에 대해 생각한다

흥미로운 점에 대해서 이야기 할 것입니다 스타일 가이드도 만들었습니다 그래서 아직 자바 가이드를 사용하고있는 여러분 – 내 말은, 우리는 실제로 하나도 가지지 않았다는 것입니다 하지만 소스 코드를 따르고 있다면, 당신은 아마 당신의 들판에 M의 접두사를 붙일 것입니다 우리가 그렇게하지 않는다는 것을 알면 행복하게 될 것입니다

더 이상 Kotlin 첫째, 우리가 정말로 그것을 좋아하지 않기 때문에, 그리고 네가 정말로 할 수 없기 때문에 어쨌든 Kotlin의 속성 구문 때문입니다 우리는 또한 상호 운용성 가이드가 있습니다 코드를 작성하려고한다면 그것은 두 자바 개발자 모두가 소비하기위한 것이다 및 Kotlin 개발자, [INAUDIBLE] 자바 코드 또는 코 틀린 코드 작성 우리는 당신에게 설명 할 수있는 가이드가 있습니다

API 작성 방법 그래서 그들은 두 언어로 자연스럽게 사용될 수 있습니다 그리고 그것들은 우리가 스스로 따라가는 지침입니다 플랫폼 및 지원 라이브러리에 포함 된 새로운 API CHASE HAASE : API에 대해 이야기 해 봅시다 우선 Android의 레이아웃, 그 (것)들의 낱단이있다, 그러나 이들 사람들이 시간이 지남에 따라 다루는 중요한 것들입니다 우선 AbsoluteLayout이있었습니다

그리고 사용하기 쉽습니다 왜 그렇지 않습니까? 그럼 정확히 어디서 볼 수 있을까요? 너는 그걸 원해, 그렇지? LinearLayout, 당신은 그 것들을 중첩 할 수 있습니다 원하는만큼 깊게 UI를 정확하게 얻을 수 있습니다 너 찾고있어 FrameLayout, 괜찮습니다

당신이 그것을 곁눈질로 본다면, AbsoluteLayout과 같은 것입니다 로망 가이 : 그게 우리가 말할 수있는 가장 좋은 것입니다 괜찮아 GridLayout, 밝혀졌습니다 그것은 사용하기에 조금 복잡합니다

그러나 우리는 그것을 이해할 수 있으며 유연성이 매우 뛰어납니다 그곳에 그리고 RelativeLayout, 우리는 그것이 비싸다고 들었습니다 우리가 사용해야 할 것인가 아닌가? 그래서 현대 세계 다음은 AbsoluteLayout에 대한 우리의 생각입니다

우리는 단지 그것을 분명히하고 싶습니다 [LAUGHTER AND APPLAUSE] CHET HAASE : 이것이 더 이상 사용되지 않는 유일한 이유 하나의 중요한 클래스가 있기 때문입니다 하위 클래스는 – ROMAIN GUY : 아니, 더 이상 사용되지 않습니다 사용되지 않습니다 CHET HAASE : 더 이상 사용되지 않습니다

승인 글쎄, 우리는 그걸 사용하지 않았고, 그 정도면 충분하다 웹보기가 AbsoluteLayout에 있기 때문에 우리가 취할 수있는 것처럼 죄송합니다 사용하지 마십시오

잘하면, 당신은 아니에요 LinearLayout, 여전히 실제로 사용하는 것이 좋습니다 특히 간단한 경우 네가 깊고 깊게 중첩되어 있다면, 그때 당신은 깊고 깊게 틀렸고, 더 나은 해결책이 있습니다 우리는 슬라이드의 맨 아래에 그것을 올릴 것입니다

FrameLayout, 간단한 사용 사례에서도 괜찮습니다 너는 거기에 그 한가지를 넣어야한다 적절한 패딩과 마진을 유지해야합니다 그것은 그곳에있는 일종의 것입니다 ROMAIN GUY : 그리고 FrameLayout의 더러운 비밀 이 경우 AbsoluteLayout이라는 것입니다

여백을 올바르게 사용하면 기본적으로 AbsoluteLayout을 가지고 있지만 그렇게하지 마십시오 그것들을하지 마십시오 그러지 마 GridLayout– 사실은 문제를 제외하고 도구와 함께 사용하도록 의도 된 실제로 도구를 썼다 로레인 가이 : 우리가 잊은 것 같아

아마도 가장 좋은 레이아웃이 아닐 것입니다 당신의 상황을 위해 그 주위에 머리를 감쌌다 승인 거기에 더 나은 해결책이있을 수 있습니다 RelativeLayout– 우리는 ConstraintLayout이, 일반적으로 더 나은 해결책입니다

나는 그것을 능력의 부분 집합으로 생각할 것이다 RelativeLayout 그것은 많은 기능을 가지고 있습니다 아이들의 상대적 위치 선정, 서로에 대해 그러나 그것은 상대적인 위치 지정 방법을 더 많이 가지고 있습니다 가이드 라인 및 그들이 수행 한 새로운 기능 중 일부 ConstraintLayout에서 작업

제가 설명하기를 좋아하는 방식은 ConstraintLayout입니다 작동하는 RelativeLayout입니다 CHET HAASE : 또한 그것에 대해 가장 좋은 점은 도구와 밀접하게 통합되어 있습니까? 그것은 같은 사람들에 의해 직렬로 작성되었습니다 도구를 사용하면 디자인 도구가 실제로 작동 함을 의미합니다 잘 레이아웃, 그 반대, 잘, 그들은 API를 만들었고 도구는 결코 따라 잡지 못했습니다

그건 거기에 해당하지 않습니다 우리는 20을 언급했다 아직 20이 아닙니다

나는 그것이 곧 20이라고 말할 것이다 그래서 20에 등장 할 것을주의 깊게 살펴보십시오 이번 주 존과 니콜라의 이야기 아마도 그 물건들 중 일부는 넘어갈 것입니다

AbsoluteLayout에 대한 최종 생각 로레인 가이 : 그냥 알기 쉽습니다 그래서 UI 툴킷에 클래스가 있습니다 AdapterView는 여러 위젯의 기본 클래스입니다 그래서 ListView, GridView 및 갤러리

그리고 그들은 수년 동안 우리를 잘 봉사했습니다 그들은 몇 가지 문제가있었습니다 그들은 유지하기가 어려웠다 GridView는 사용되지 않았다고 생각합니다 꽤 많은 앱으로 꽤 오래 동안, 어쩌면 응용 프로그램에 대한

갤러리는 수평 ListView와 비슷합니다 오랫동안 사용하지 않을 것이라고 확신합니다 그리고 우리는 잠시 그것을 확실히 보지 못했습니다 어쨌든 내가 너라면 네가 사용하지 않을거야 아마 작동하지 않습니다

여기에 몇 가지 문제가 있습니다 따라서 AdapterView에는 어댑터가 있으며, 어댑터가 데이터 세트간에 인터페이스됩니다 및보기 자체 어댑터에서 할 수있는 일 중 하나 데이터 세트의 변경 사항을 뷰에 알립니다 문제는 당신에게만 알릴 수 있다는 것입니다 거친 변화의 당신이 할 수있는 말은, 어이, 뭔가 바뀌 었습니다

너무 불합리하게도 ListView에서 우리는 변경된 사항을 파악하려고하는 많은 코드가 있습니다 네가 우리에게 말할 수 있다면 좋지 않을까? 너 아마 알고 있기 때문에? 우리에게 말할 수없는 API를 만들었습니다 그래서 그것은 바보 같은 짓입니다 우리는 당신에게이 패턴을 따르라고 말하기도했습니다보기 보유자

그래서 View Holder – 그리고 그것은 하나입니다 내가 많은 사람들을 보았던 것들 중 View Holder에 대한 온라인 미친 제품이기 때문에 당신이 써야 할 번호판 그것은 실제로 매우 중요했습니다 나는 돌아가서 우리의 오래된 회담 중 하나를 들여다 보았다 보기 홀더 패턴을 사용하면 초당 10 프레임 추가 당신은 T-Mobile G1에서 ListView를 스크롤하고있었습니다

그 당시에는 많은 문제가있었습니다 더 이상 필요하지 않습니다 그러나 RecyclerView 덕분에 API의 일부로, 이제 어쨌든 무료로 받으실 수 있습니다 그리고 마지막으로 애니메이션 AdapterView에서는 애니메이션을 사용할 수 있습니다

그래서 예를 들어, ListView 항목이 데이터 세트에서 사라졌습니다 그리고 아이템을 사라지게하고 싶습니다 나머지 항목은 붕괴되어 갭을 닫습니다 ListView를 사용하여이 작업을 수행 할 수 있습니다 이 코드를 약간만 작성하면됩니다

Chet는 몇 년 전에 블로그 포스트를 썼습니다 [웃음] ListView 애니메이션 중 하나였습니다 우리는 당신에게 보여주는 일련의 비디오를 가지고있었습니다 다른 것들을하는 법 ROMAIN GUY : 이것은 코드의 일부입니다

미래 옵저버 만 이해하면됩니다 과도 상태 및 측정 및 메모 및 애니메이션이 포함됩니다 다소 어려웠습니다 그래서 이제 대신 RecyclerView가 있습니다 감사하게도

그래서 이것은 단지 바보 같은 응용 프로그램입니다 처음 RecyclerView를 실제로 사용했을 때 몇 달 전 이었어 그것은 훨씬 쉬웠다 정말 좋았어요 RecyclerView의 다른 버전을 만들 수있었습니다

RecyclerView에 대한 좋은 점 여러 위젯을 사용하는 대신 데이터 세트에 대해 효과적으로 다른 레이아웃입니다 단일 RecyclerView에 대한 레이아웃을 지정할 수 있습니다 이 코드는 레이아웃이 다른 동일한 코드입니다 RecyclerView의 관리자 CHASE HAASE : 나는 또한 그것들 모두가 수직적 이었지만 실제로는 가로 배치

몇 년 동안, 사람들은 우리에게 수평을 어떻게 할 것인지를 물었습니다 오, 쉽습니다 CHASE : 수평 ListView ROMAIN GUY : ListView에서 회전을 설정하기 만하면됩니다 그런 다음 모든 터치 이벤트를 차단해야합니다

그들을 회전 시키십시오 그리고 아마 몇 가지 더 많은 API가 있습니다 무시할 필요가 있기 때문에 어쨌든 그것은 쉽다 그래, 비밀 가장 쉬운 방법은 휴대 전화를 돌리기 만하면됩니다 90도

시스템의 일부로 더 쉽게 사용할 수 있습니다 최신 릴리스의 UI 향상 ROMAIN GUY : 그리고 RecyclerView에 관한 좋은 점 중 하나 – 훨씬 더 나은 방법으로 많은 일을합니다 우리는 페이징을 가지고 있고 우리는 프리 페칭을 가지고있다 API가 더 좋습니다

레이아웃 관리자를 변경할 수 있습니다 자신의 레이아웃 매니저를 작성할 수 있습니다 그러나 애니메이션 또한 무료로 제공됩니다 그래서 우리가 방금 본 코드와 같습니다 특히 RecyclerView를 사용하면 얻을 수있는 것 세밀한 변경입니다

아이템이 있다면 우리에게 말해 줄 수 있어요 제거 된 항목 항목이 추가되면 어떤 항목이 추가됩니까? 변경된 항목의 범위, 아니면 모든 것이 바뀌 었다고 말할 수 있습니다 이것은 당신과 우리에게 훨씬 좋습니다 좋아

좋아 파편 옛날 우리는 그 파편들 정말 복잡했습니다 또한이 문제를 해결할 것입니다 그래서 우리는 반드시 모든 것이 정확하거나 가지고있는 것은 아닙니다

사람들이 필요로하는 모든 API가 있으므로 개선점을 넣으십시오 플랫폼 릴리스로 그런 다음 응용 프로그램은 해당 플랫폼에 장치가 출시되었습니다 따라서 현대적인 조언은 플랫폼 버전을 사용하지 않는 것입니다 우리는 이후 모든 코드를 이식했습니다

지원 라이브러리에있는 모든 수정 사항을 작성하려면, 우리는 이제 더 이상 사용하지 않는 조각들을 사용했습니다 핵심 플랫폼에서 그래서 거기에 사용하지 마십시오 지원 라이브러리 또는 Jetpack 버전 조각을 사용하십시오 우리는 더 많은 선을 거기에두고 있습니다

그래서 그것들을 사용하고, 우리는 계속하고 있습니다 개선하기 이번 주에 파편에 관한 이야기가 있습니다 – 내일 아침에 CHASE HAASE : 내일은 Adam과 Ian으로부터 그러므로 사물에 대한 더 많은 정보를 듣기 위해 그것을 확인하십시오

우리가하는 일과 길 조각을 사용하는 것이 조금 더 쉬워야합니다 그 중 하나가 새로운 탐색 컨트롤러입니다 그래서 체크 아웃하십시오 그것은 파편에 일종의 빌드입니다 그것은 그들에게 의존하지 않습니다

의존성은 없지만 그렇습니다 만들고 탐색 할 수있는 기능을 구축하십시오 응용 프로그램의 화면 사이 활동은 단편과 매우 밀접하게 관련됩니다 예전에는 기본적으로 Android 애플리케이션 여러 활동들로 구성되었습니다

이것이 모든 안드로이드 애플리케이션의 애플리케이션 흐름이었습니다 우리는 개발자가이 작업을 수행 할 것을 기대했으며 개발자는이 작업을 수행했습니다 앱의 한 화면에서 이동하려는 경우 다른 사람에게, 당신이 의도를 시작하면, 당신은 새로운 창을 얻습니다 거기에 당신을 데려 오기위한 창 애니메이션이 있습니다 거기 있네

새로운 접근법은 가능한 한 단일 활동을 사용하는 것입니다 그것은 사용자에게 훨씬 풍부한 경험을 선사합니다 그 창문 애니메이션들 – 음, 그들은 움직이고 있어요 하지만 그들은 재미있는 일을하지 않습니다 사용자를 돕는 아무 것도하지 않습니다

응용 프로그램의 한 상태에서 다른 상태로 전환합니다 대신 기본적으로 완전히 다른 창 너가 실제로 할 수있을 때 볼 수있게된다 단일 활동 방식을 사용하여 동일한 Chrome 유지 응용 프로그램 주위 같은 행동을 할 수도 있습니다 바에서 콘텐츠가 아래로 바뀌면서 또는 더 풍부한 애니메이션을 사용하십시오

핵심 플랫폼 애니메이션 또는 조각으로 가능 애니메이션 그러니 계속해서 활동을하십시오 신청서에 상황이있을 수 있습니다 다른 진입 점이있는 곳, 특히 누군가가 당신의 신청서에 올 수있는 길이가 길다 와

그런 다음 별도의 활동을하는 것이 적절합니다 그것이 그 정보를 폭로하는 방법입니다 하지만 그렇지 않으면 단일 활동을 사용해보십시오 조각은 단일 활동 응용 프로그램에는 필요하지 않지만, 하지만 그들은 이것에 많은 도움을 줄 수 있습니다 특히 최근 개선 된 점이 몇 가지 있습니다

그리고 네비게이션 콘트롤러도 마찬가지다 건축물 여기 오래된 조언이있었습니다 몇 년 전– OK, 2016 년 기본적으로 2 년 전 Dianne Hackborn이 게시했습니다

G +에서 우리는 대개 응용 프로그램 개발자로부터이 질문을받습니다 여기서 우리는 애플리케이션 아키텍처 그들은 그들의 신청서에서 사용해야합니다 그리고 우리의 대답은 항상, 우리는 상관하지 않습니다 우리는 당신이 아닙니다

우리는 귀하의 신청서가 어떻게 작동하는지 알지 못합니다 우리는 최고의 아키텍처를 모릅니다 귀하의 신청서에 대해서는 귀하가 직접 결정하십시오 그리고 보통 다음과 같은 질문이 있습니다 예, 알 겠어

하지만 어떤 아키텍처를 사용해야합니까? 그래서 Dianne은 기본적으로 이렇게 말했습니다 이 모든 것을 한 번 우리는 상관 없어 우리가 가지고있는 구성 요소들 – 콘텐츠 제공자, 활동, 서비스 – 이들은 시스템 수준의 구성 요소입니다 그들은 주변의 건축물이 아닙니다

당신은 당신의 어플리케이션을 빌드합니다 그러므로 적절한 것을 만드십시오 귀하의 응용 프로그램에 대한 새로운 조언은 실제로, 우리는 당신에게 몇 가지 권장 아키텍처를 제공하게되어 기쁩니다 사람들이 적어도 좋아할 것이라고 밝혀 졌기 때문에 말이되는 몇 가지 일반적인 조언, 우리는 지금 우리가 그것을 가지고 있다고 믿습니다

특히, 아키텍처 구성 요소의 경우, 우리는 우리가 많은 의미가 있습니다 우리는 사용하기 쉬운 API를 가지고 있습니다 당신은 그 주위에 구축 할 수 있습니다 우리는 당신이 이것을 사용하도록 요구하지 않습니다 자신에게 맞는 아키텍처를 사용하십시오

하지만 핵심 아키텍처가 있습니다 우리는 일해야한다고 믿습니다 새로운 애플리케이션을 시작하는 경우, 팀에 새로운 개발자가 있다면 말이됩니다 우리가 일한 이유 중 하나 Android 아키텍처 구성 요소 포함 어려운 문제를 해결하는 것이 었습니다 가장 어려운 문제 중 하나는 Android 수명주기였습니다

그리고 우리의 대답은, 당신이해야 할 모든 것입니다 이 도표를 이해하고 암기합니다 그리고 누군가 외부에서 자신의 버전을 만들었습니다 그 다이어그램은 실제로 이렇게 보입니다 당신이 이것을 보았다면 이해하기가 훨씬 쉽습니다

따라서 기본적으로 알아야 할 모든 것이 있습니다 항상 네 머리 속에 문제는 기본적으로 당신의 활동에 많은 방법들을 만들어라 라이프 사이클을 추적하고 관리 할 수 ​​있습니다 당신은 창조와 시작과 멈춤을 다루고 있습니다

다시 시작하고 일시 중지하면 물건을 다룰 것입니다 뿐만 아니라 파괴에서 Create에서 너무 많이 사용하고있을 것입니다 당신은 아마 경주 조건뿐만 아니라 당신의 시작과 당신의 중지에서 누출, 그리고 당신은 아마 일시 중지 및 이력서에서 그 일을하고있을 것입니다 게다가

그리고 당신은 왜 당신이 파괴에 대해 무시하고 있는지 정확히 알지 못합니다 그러나 누군가는 당신이 아마해야한다고 말했습니다 그래서 우리도 그렇게 할 것입니다 그러는 동안 실제로는 수명주기 상태 만 알고 있습니다 당신이 그 방법들을 오버라이드한다면

우리는 당신에게 그 질문을하는 방법을주지 않았습니다 우리는 그것이 내부적으로 무엇인지 압니다 우린 너를 비밀리에 들여 보내지 않을거야 따라서 쿼리 할 API가 없습니다 그래서 모든 메소드를 오버라이드 할 필요가 있습니다

그리고 나서 당신은 거기에 너무 많은 코드를 집어 넣게됩니다 기본적으로 너무 많은 논리가 모든 곳에서 일어나고 있습니다 새로운 접근 방식은 라이프 사이클이라는 객체가 있다는 것입니다 소유자 라이프 사이클 객체를 요청할 수 있습니다

그런 다음 상태를 쿼리하거나 당신이 어떤 라이프 사이클 상태인지 알고 싶다면, 또는 관찰자를 설정할 수 있습니다 그런 다음 해당 메소드에 콜백을 가져올 수 있습니다 이렇게하면 별도의 장소로 추상화 할 수 있습니다 기본적으로 모든 활동 코드를 포기하지는 않습니다 이 정보

하지만 당신은 그것을 어디에 두는 지 귀하의 응용 프로그램에서 감각 다행히도 우리는 lifecycle owner의 하위 클래스를 오버라이드합니다 또는이를 조각과 AppCompat 모두에서 구현하십시오 활동 그래서 지원 라이브러리에서 이것을 사용하십시오

수명주기 소유자입니다 따라서 기본적으로 수명주기를 얻기 위해 쿼리 할 수 ​​있습니다 그런 다음 거기에서 나가십시오 그래서 우리는 당신이 활동할 모델에서 출발했습니다 기본적으로 모든 라이프 사이클 종속 로직이 포함되어 있습니다

활동이 훨씬 더 작을 수있는 모델로, 그 논리를 꺼내 다른 것으로 추상화하십시오 그곳에는 생명주기 관찰자를 설정하고, 원하는 콜백을 얻으십시오 우리는보기와 데이터에서 비슷한 문제를 겪고 있습니다 우리에게는 활동이 있으며, 우리는이 모든 정보를 가지고 있습니다 거기에 대한 견해에 대해

그리고 우리는 그 견해에 대한 자료를 가지고 있습니다, 우리는 데이터가 언제 바뀌는지를 알아야합니다 또한 라이프 사이클을 추적해야합니다 그래서 우리는 잘못된 시간에 물건을 새거나 물건을 부르지 않습니다 그래서 우리는 결국 너무 많은 것을 가지고 끝납니다 이제는 LiveData에 대한 개념이 생겼습니다

배치 할 수있는 ViewModel 그 물건들 당신은 활동에서 그것을 추출 할 수 있습니다 그 모든 정보를 그곳에 넣을 수 있습니다

그걸 관찰해라 이제 활동에서, 당신은 정말로 보기 및 참조 정보 만 제공 ViewModel에 전달합니다 그런 다음 모든 논리를 ViewModel에 넣으십시오 그것은 LiveData 객체를 사용하고 있습니다 자체 라이프 사이클을 처리하므로 사용자는이를 관찰 할 수 있습니다

훨씬 나아 졌어 덜 버기 데이터의 경우, 당신에 대한 우리의 논쟁은 당신 스스로에 달렸습니다 우리는 귀하의 데이터를 관리하지 않습니다 너가 원하는 것을해라

그리고 많은 데이터베이스 솔루션이 있습니다 우리는 플랫폼에 SQLite를 가지고 있습니다 가서 사용하십시오 너 자신을 노크 해 도대체 무엇이

우리는 그 사업을 시작하고 싶지 않습니다 새로운 접근 방식은 실제로 데이터를 위해 뭔가를 제공한다는 것입니다 SQLite를 기반으로 구축되었지만 실제로는 빌드 시간 확인 기능을 제공하므로 사용자는 이러한 쿼리를 전송 한 다음 런타임에 오류가 발생합니다 그러나 빌드 타임과 통합시이 문제를 볼 수 있습니다 우리가 이전에 본 라이브 데이터 (LiveData) 또는 원할 경우 독자적으로 할 수 있습니다

우리는 데이터베이스 솔루션을 인수하려고하지 않습니다 우리는 더 나은 지역 영구 이야기를 단순히 제공하고 있습니다 우리가 이전에했던 것보다 더 쉽게 당신을 위해 전체 다이어그램은 다음과 같습니다 여기서 유일한 새로운 요소는 저장소에 대한이 아이디어입니다

기본적으로 추상화하는 패턴입니다 데이터의 출처 그래서 그것이 지역이나 웹에서 오는 경우, 나머지 국민들에게는 중요하지 않습니다 그것을 쿼리하고 있습니다 거기에서 추상화를하는 것은 좋은 일입니다 데이터 페이징

그래서 우리는이 것을 CursorAdapter라고 불렀습니다 그것에 대해 좋은 요소가있었습니다 그것은 데이터베이스 커서에 대한 지원을했습니다 좋았어 그러나 그것은 ListView에만 국한되었으며, 기본적으로 비효율적 인 문제가있었습니다

페이징 크기, 그런 것들 우리는 AsyncListUtil을 더 유용하게 사용했습니다 그러나 일을하기에는 너무 비효율적이었습니다 웹 거래를 좋아합니다 그래서 우리는 현대 안드로이드에 새로운 모델을 가지고 있습니다

우리는 데이터 페이징을 가지고 있습니다 이번 주 10 페이징 라이브러리, 그것에 대해 좋은 것들이 있습니다 따라서 RecyclerView와 함께 작동합니다 세분화 된 데이터 변경 사항을 처리합니다

훨씬 효율적으로 백그라운드 스레드를 아주 쉽게 사용할 수 있습니다 변경 사항을 관찰 할 수 있으므로 LiveData와 통합됩니다 그러나 다시 한번, 우리는 당신에게이 아키텍처를 강요하지 않습니다 RxJava2를 사용하고 있다면, 매우 쉽게 또한 유연한 데이터 가져 오기 옵션, 그래서 창 크기를 지정할 수 있습니다

그리고 이런 일들을 원할 때 물론, 항상 상충 관계가 있습니다 나는 데이터 페이징에 대해 나쁜 점을 발견했다 그 이름이 지루하다는 것입니다 ROMAIN GUY : 그래픽

그래서 우리가 안드로이드를 시작했을 때 우리는 OpenGL ES 10 만 가지고있었습니다 셰이더도 없었어요 우리는 소프트웨어 렌더링으로 모든 것을하고있었습니다 그것은 몇 년 동안 쟁점이었습니다

초기 장치에는 충분히 빠릅니다 우리가 타블렛 폼 팩터를 치면 문제가되기 시작했다 이전에는 9 개의 패치를 많이 사용했지만, 너의 일부는 고통 받았다고 확신한다 9 개의 패치를 작성함으로써, 또는 더 나쁜 것은 UX 디자이너에게 설명하려고 시도하는 것입니다 그것들을 만드는 법

검은 점들은 어디에 두 시나요? 그들은 어느쪽에 가야합니까? 나는 아직도 모른다 오늘날까지 TextureView 대 SurfaceView, 우리는 미리보기 토크에서 그걸 만졌어 기본적으로 항상이 문제가있었습니다 당신은 통합 할 수있는 덜 효율적인 TextureView를 사용합니까? ListView 및 애니메이션과 같은 다른보기와 더 좋게, 또는 SurfaceView를 사용합니까? 그리고 비트 맵 관리는 어려웠습니다

많은 사람들이 응용 프로그램을 만들었고 나간다 비트 맵을 만들려고했기 때문에 메모리 오류가 발생했습니다 당신은 캐싱을해야하며, 이것은 어렵습니다 그리고 우리의 대답은 근본적으로, 어, c'est la vie이었습니다 그래서 지금

OpenGL 31 및 32가 있습니다 콘텐츠 쉐이더가 있습니다 Vulcan을 사용하면 저급 그래픽 렌더링을 수행 할 수 있습니다

우리는 어디에서나 하드웨어 가속을 수행합니다 VectorDrawables는 기본적으로 대부분의 드로어 블을 대체했습니다 및 응용 프로그램의 비트 맵 우리에게는 작은 응용 프로그램이 있습니다 당신은 지원할 필요가 없습니다 – 여러 밀도를 지원하는 것이 훨씬 쉽습니다

이전과 같이 많은 배치를 필요로하지 않습니다 우리가 지금하고있는 일 우리가 너와 노력하고 있니? 아주 자주, 응용 프로그램 개발자는 솔루션을 찾기 위해 우리를 찾습니다 그러나 공동체가 – 즉, 너 – 우리가 생각하는 놀라운 도서관을 지어왔다 당신이 사용해야하는 것이 맞습니다 예를 들어 글라이드 (Glide) 또는 피카소 (Picasso) 또는 로티 (Lottie) 그들이하는 일에 뛰어납니다

비트 맵을 관리하려는 경우 또는 Lottie와 함께 미친 복잡한 애니메이션을 만들고 싶습니다 당신은 그것들을 사용해야합니다 우리는 뭔가를 재창조하는 데 시간을 낭비하지 않을 것입니다 이미 거기에 존재하고 우리는 생각합니다 그것이하는 일에 아주 능숙합니다

그러니 그 라이브러리를 사용하십시오 다시 한 번, 이것을 알아라 아마도 SurfaceView를 사용해야 할 것입니다 더 이상 TextureView가 아닙니다 시간이 오래되었습니다

마지막으로 우리는 당신의 코드를 프로파일 링하라는 말을 사용했습니다 우리는 가능한 한 작업을하지 말라고 말하곤했습니다 메모리 소비를 최소화 할 수 있습니다 하지만 이제는 더 나은 장치가 있습니다 우리에게는 많은 코어가 있습니다

우리는 많은 RAM을 가지고 있습니다 우리는 더 나은 언어를 가지고 있습니다 더 나은 런타임입니다 따라서 대신 코드 작성에 필요한 작업을 수행해야합니다 가능한 한 작업을 피하고 또한 최소화 메모리 소비

CHET HAASE : 그 장치가 밝혀지기 때문에 여전히 제약이있다 그 점을 명심해야합니다 배터리 수명은 중요하며 대역폭은 귀중합니다 이 모든 것이 사용자 경험에 기여합니다 따라서 사용자가 실제로 아직도 이런 것들에 대해 보수적이다

애플리케이션에 최상의 성능 제공 그게 맞아 우리는 당신에게 감사하고 싶다 그리고 다른 방법이있다 이것을 말하십시오 그리고 우리는 끝났다고 생각합니다

고맙습니다 [박수 갈채] [음악 재생]

How to Kotlin – from the Lead Kotlin Language Designer (Google I/O ’18)

[음악 재생] 제임스 라우 : 고마워요 오늘 아침 여기와 줘서 고마워

제 이름은 James입니다 저는 Google의 Kotlin 팀원입니다 오늘, 나는 매우 기쁜 소식을 전한다 JetBrains의 특별 게스트, 정말로 소개가 필요하지 않습니다 자, 여러분 모두는 코 틀린이 지금 가장 사랑받는 프로그램 중 하나 세계의 언어

Google I / O에서는 Google이 매우 드뭅니다 외부 스피커가 있어야합니다 하지만이 사람은 작년에 여기 있었는데, 우리는 아무도 생각할 수 없기 때문에 그를 초대했습니다 그렇지 않으면 코 틀린을 가르치는 것이 더 낫다 그것을 발명 한 사람들의 리드 언어 디자이너를 환영 해주십시오

코 틀린, 안드레이 브레 슬라브 [박수 갈채] 앤드류 브레 슬라브 : 고마워, 제임스 훌륭한 소개 주셔서 감사합니다 모두들 안녕 나는 너를 여기에서 만나서 매우 기쁩니다

오늘 나는 그것이 무엇이 될 수 있는지 이야기 할 것이다 코 틀린 그리고 저는 실제로 라이브 데모를 할 것입니다 제 데모를 가져 오십시오 슬라이드에이 끔찍한 코드가있는 이유는 우리 모두가 배우고 있고, 우리의 오래된 습관이 때로는 방해가되지

그래서 나는 오늘 어떻게 나가야하는지에 관한 주제를 발표 할 것입니다 귀하의 자바 습관을 배우고 귀하의 코 틀린 습관을 찾으십시오 그래서 우리 모두는 다른 배경에서 왔습니다 그리고 우리 중 많은 사람들이 자바 프로그래밍 언어로 시작했습니다 이를 통해 프로그래밍에 대한 지식을 축적했습니다

그래서 우리는 많은 것을 기억합니다 그리고 그 일은 코 틀린 (Kotlin)이 여러 언어에서 영감을 얻었으며, 자바 프로그래밍 언어도 포함됩니다 따라서 Kotlin에서 많은 Java 구조를 재현 할 수 있습니다 그리고 그것은 효과가있을 것입니다 이런 식으로 일을 할 수 있습니다

그러나 그것은 많은 경우에 극적으로 개선 될 수 있습니다 그래서이 특별한 예제는 클래스 선언에 관한 것입니다 그리고 여기서 내가 왼쪽에 코 틀린 (Kotlin) 수업이 있다는 것을 알 수 있습니다 오른쪽에 Java 클래스가 있습니다 그리고 그들은 매우 비슷해 보입니다

그러나 이것은 분명히 Kotlin 코드를 작성하는 방법이 아닙니다 그래서 당신이 실제로해야 할 일은 무엇입니까? 불필요한 것들을 모두 제거하십시오 여기서 제가 말해야 할 것은 두 가지 속성, 하나의 클래스입니다 그게 맞습니까? 그래서 저는 그것을 손으로 변형 시키려고 노력할 수 있습니다 하지만 실제로 좋은 도구를 과시하고 싶습니다

자바 측에서 코드를 복사하여 붙여 넣기 만하면됩니다 Kotlin 측에, 그래서 그것은 자바를 Kotlin에 사용할 것이다 IDE에 내장 된 변환기를 사용하면됩니다 그래서 붐, 거기있다 실제로 모든 단일 라인 하나의 클래스, 두 개의 속성을 선언하는 데 필요합니다

그게 전부 야 여기에있는 것은 기본 생성자가있는 클래스입니다 그래서 두 개의 매개 변수를 가지며 둘 다 속성입니다 그게 당신이 말하고 싶은 모든 것입니다 그래서 이것은 이것들 중 하나입니다

값싼 선언 클래스가 Kotlin에있는 방법을 보여줍니다 그리고 이것에 결과가 있습니다 이 코드를보십시오 여기서 코드를 작성하는 방법이 분명하지 않습니다 실제로 어떤 언어로든

나는 전체 이름을 이름으로 파싱하고 싶었다 와 성 그리고 그것이 제가 여기서하고있는 일입니다 하지만 결과를 함수에서 제외 시키려면 어떻게 팩하나요? 함수에서 두 가지를 반환하는 방법이 없습니다 나는 하나의 물건을 넣어야한다

그리고 나는 여기에 목록을 남용하고, 어색하게 하나를 꺼내고있다 다른 하나는 이름과 성을 만드는 것입니다 어떤 언어로도 이것을하지 마십시오 그러나 심리적 인 이유가 있습니다 이것을하기 위해서, 적어도 우리의 오래된 습관에서는, 선언 클래스가 비싸니까요, 그렇죠? 새 파일을 만들고 코드를 넣어야합니다

그것은 다소 어색합니다 그러나 Kotlin에서는 이것을 할 필요가 없습니다 말할 필요가있는 것, 수업 시간, 성명, 이름과 성을 속성으로 사용합니다 그리고 나서, 여기서해야 할 일은 단지 그것을 되 찾는 것입니다 그래서 내 이름

여기 간다 이제 지수 대신에 첫 번째와 마지막으로 말할 수 있습니다 이리 그래서 그것이 아이디어입니다 싸구려 클래스가 항상있는 것은 아닙니다

선언 사이트에서 시간을 절약 할 수 있습니다 정신적 노력을 덜어줍니다 여러 수익을 클래스로 나타낼 수 있습니다 그것은 당신에게 아무런 비용도 들지 않습니다 그래서 이걸 실행하면 내 평등이 그게 한 줄짜리 클래스이기 때문에 분명히 작동하지 않습니다

그리고 이제 저는 거기에 동등한 것을 선언하러 갈 것입니다 거기에 해시 코드 등이 있습니다 너무 장황하다 그러나 나는 Kotlin에서 이것을 할 필요가 없다 아마 거기 있다는 것을 알기 때문에 뭔가 데이터 클래스라고합니다

데이터 클래스를 아는 사람은 누구입니까? 많은 사람들, 좋아 그래서 당신은 내가이 키워드 하나를 거기에 넣었다는 것을 알고 있습니다 컴파일러는 나에게 많은 것들을 생성합니다 해시 코드, 문자열에 대한 것, 및 기타 많은 편리한 방법 그게 전부입니다

수업이 얼마나 비싸다는 생각을 바꾸십시오 모든 추상화에서 쉽게 사용할 수 있습니다 그래서 더 많거나 적게 워밍업으로 끝났습니다 다른 것을 보도록하겠습니다 속성

그래서 우리는 수업에 관해 이야기했습니다 속성을 살펴보고 함수로 넘어갑니다 그래서 여기에 당신이 그것을하지 말아야 할 방식으로 행해진 속성이 있습니다 다시 코 틀린에서 그래서 내가 전에 보여 줬던 문제들 게터와 세터 모두가 일종의 단 하나의 라이너였습니다

하찮은 맞춤 설정 도구를 원한다면 그 기능을 정의하지 마십시오 당신은 아마도 당신이 알고있는 것처럼 당신의 커스텀 세터 문법을 가지고 있습니다 데이터 클래스를 알고 있다면 알 수 있습니다 맞춤 설정 도구 안에는 다음과 같은 필드가 있습니다

제출되지 않았지만 현장 – 백엔드 스토리지에 쓸 수는 있지만 그게 전부입니다 다른 이름으로 추가 이름을 입력 할 필요는 없습니다 그래서 간단합니다, 맞죠? 그런 다음이 코드를 살펴보십시오 그래서 여기에 이미 합리적인 논리가 있습니다 두 가지 속성이 있습니다

그 중 하나는 비공개 및 null 가능입니다 및 변경할 수 있습니다 처음 액세스 할 때 그게 null인지 확인하고 있습니다 그런 다음 가치를 계산하고 그것에 글을 씁니다 그리고 출력하고, getter에서 반환합니다

그래서 무엇입니까? 게으른 재산이지, 그렇지? 나는 수십, 수천을 개인적으로 썼다 Java 및 다른 많은 언어의 사람들 중 그래서 나는 그것에 지루해합니다 그래서 Kotlin은 다음과 같은 추상화 메커니즘을 가지고 있습니다 속성 위임 위임 된 속성을 사용하면 이 게으른 논리의 모든 반복

우리가 신경 쓰는 것은이 표현입니다 그럼 그냥 해보 죠 이 모든 것을 단지 게으름으로 구현하십시오 이거 야 그래서 내가 지금하고있는 것, 나는 말하고있다

내 재산은 단순히 무언가에 의해 초기화되지 않습니다 이 게으른 일에 위임되었습니다 그리고 처음 액세스하면이 람다가 실행됩니다 그리고 나머지는 도서관에 보관 될 것입니다 그래서 게으른 것은 언어 구조가 아닙니다

그것은 단지 라이브러리 함수입니다 당신은 당신 자신을 정의 할 수 있습니다 그리고 도서관은 많은 다른 것들을 제공합니다 그래서 여기 테이크 아웃은 당신이 예를 들어 관찰 할 수있는 공통된 종류의 속성을 가지며, 무언가가 수정되었음을 통보 받아야 할 때, 라이브러리를 사용하거나 직접 작성하십시오 그래서 여기에서, delegates

observable이 일을합니다 표준 라이브러리에서 그러나 원한다면 이와 같은 코드를 작성하지 않아도됩니다 하나의 속성이 있고 다른 속성이 있으면, 다른 하나는 똑같은 일을 반복해서 반복합니다 실제로 당신이해야 할 일은 이것뿐입니다

캡슐화하는 단일 클래스를 선언하십시오 일반 getter와 같은 속성의 논리 및 일반 설정자 그리고 그게 다야 이제 여러 속성에서이 클래스를 참조 할 수 있습니다 비즈니스 로직 데이터베이스 액세스, 모든 종류의 유효성 검사

원하는 모든 것을 라이브러리로 추상화 할 수 있습니다 프로젝트 전체에서 다시 사용할 수 있습니다 그것은 의미가 있습니까? 누가 이것을 이미 사용합니까? 나는 모른다 너무 많은 사람들 당신은 실제로해야합니다

나는 당신이 이것으로부터 이익을 얻을 수 있다고 확신합니다 그래서 이것은 속성에 관한 것입니다 이제는 기능에 대해 알아 보겠습니다 기능은 매우 중요합니다 다시 한번 이것은 매우 끔찍한 코드입니다

Kotlin에서 이와 같은 코드를 작성하지 마십시오 이것은 우리의 습관에 매우 영감을 받았습니다 Java 프로그래밍 언어에서, 내가 가지고있을 때 모든 것을 수업에 넣기 그래서 StringUtil– 프로젝트에 자체 StringUtil이 있습니까? 수업? 오, 그렇지 않다면, 그냥 아주 새로운 프로젝트 일세, 그렇지? 그래서 내 프로젝트 중 하나가 있습니다 하지만 문제는 코 틀린에서 조금 다릅니다

수업을 사용할 필요가 없습니다 음, 우선, Kotlin 수업에는 정체감이 없습니다 따라서이 클래스에서 이러한 함수를 사용하려면, StringUtil, 괄호, 새로운 객체를 만듭니다 나는 매번 새로운 물건을 원하지 않는다 나는 이것을 이렇게 원한다

그래서 나는이 클래스를 객체로 만든다 내 정신 이상에 약간의 개선이 있습니다 권리? 그래서 저는 매번 객체를 만들고있었습니다 나는 함수를 호출하고 싶었다 그건 미친 짓이야

하지만 실제로, Kotlin에서, 나는 어떤 용기를 담을 필요가 없다 왜냐하면 나는 최상위 함수를 가지고 있기 때문이다 그래서 이것은 기능처럼 명백하게 보일 수 있습니다, 그것들은 무엇입니까? 그들은 단지 선언 일뿐입니다, 그렇죠? 그러나 일부 언어는 수업 시간과 수업 시간에만 많은 언어를 사용합니다 이것을 배우고 이것에 의지하십시오 그래서 이것은 Kotlin 방법의 훨씬 더 많은 것입니다, 그러나 그것은 측면에서 여전히 크지 않다

당신이 코 틀린과 함께 할 수있는 것의 두 가지 과부하가있다 그래서 getFirstWord는 문자열을 파싱하기로되어 있습니다 첫 번째 공간을 찾고 첫 번째 단어를 가져 와서 그것을 반환하십시오 하지만 구분 기호가 공백이 아닌 쉼표 인 경우에는 어떻게 될까요? 또는 뭔가? 그래서 여기에 더 많은 기능을 갖춘 버전이 있습니다 그리고 나서, 실제로 이것을 호출하는 방법입니다

대부분의 상황에서 그래서 여기에 표현하고자하는 것은 단지 기본값입니다 Java에서 우리는이 작업에 과부하를 사용하는 데 익숙합니다 일부 사용자는 nullable 매개 변수를 사용합니다 pass와 null을 여기에 넣으면 기본값을 줄 것입니다

Kotlin에서하지 마십시오 너는 필요 없어 실제로 필요한 것은 단순히 기본값을 지정하는 것입니다 내 기본값은 공간입니다 그게 전부 야

따라서 기본값을 에뮬레이트 할 필요가 없었습니다 그들은 둘 다 언어에 속합니다 그리고 당신이 많은, 많은 디폴트를 가질 때 매개 변수가 다른 값, 여러개의 부울 (boolean)을 좋아하는 등등 명명 된 매개 변수 구문을 사용하여 매개 변수 구문을 표현할 수 있습니다 당신은 실제로 필요합니다

나머지는 모두 기본적으로 사용됩니다 그래서 이것은 처음부터 기능을 줄였습니다 그리고 훨씬 더 표현력이 좋습니다 승인 기능면에서 좋지, 그렇지? 사실,이 함수는 중간 정도의 종류입니다

Kotlin 스타일과 Java 스타일 사이 실제로 문자열에서 작동하기 때문입니다 이것을 문자열 클래스에 넣는 것이 좋습니다 오, 잠깐, 그렇지 않아 문자열 클래스는 당신에 의해 제어되지 않기 때문에, 모든 것을 문자열 클래스에 넣을 수는 없습니다 그리고 문자열 API를 최소한으로 유지하려고합니다

그래서 내가 뭘하고 싶은지 나는 내 끈을 말할 수있는 이런 식으로, getFirstWord, 그게 전부입니다 그래서 그것은 방법처럼 보입니다 실제로 확장 기능이라고합니다 문자열 클래스에 앉아 있지 않습니다

나는 JDK에 가지 않고 제어 할 수있는 클래스를 변경하지 않았다 그러나 여전히, 그것은 이렇게 작동합니다 이것이 당신이 사용할 수있는 메커니즘입니다 어떻게 작동하는지 수동으로 설명하겠습니다 그래서 나는 string 타입의 리시버를 가지고있다

이제는이 매개 변수가 더 이상 필요하지 않습니다 여기에이 점을 말할 수 있으며 여기에서이 점을 사용하십시오 또는이 모든 것을 왼쪽에서 생략하십시오 이제는이 방법으로 사용할 수 있습니다 이해가 되니? 나는 재산으로도 똑같이 할 수있다

사실, 이렇게하는 것이 매우 좋을 것입니다 그냥 속성 이름으로 첫 단어가 있습니다 확장 속성을 가질 수 있습니다 물론 사용자 정의가 없습니다 구분 기호에 대한,하지만 그렇지 않으면 당신은 좋은거야

네, 여기에 공간을두기 만하면됩니다 그리고 그게 다야 따라서 확장 기능, 확장 속성 – 그것은 실제로 매우 중요한 아이디어입니다 그것은 단지 편리함이 아닙니다 수업을 실제로 최소한으로 유지할 수 있습니다

그러니 Kotlin의 문자열 클래스를보십시오 그것은 단지 5 가지 방법입니다 자바와 비교하면 스크린과 스크린이 될 것입니다 선언 따라서 API를 최소한으로 유지할 수 있습니다

그리고 모든 유틸리티 기능은 확장 기능 일 수 있습니다 다른 라이브러리에 앉아서 모듈화 할 수 있습니다 이는 API를 설계하는 데있어 매우 중요한 도구입니다 질문 있니? 승인 어쨌든 나는 그들을 데려 갈 수 없었다

좋아, 자, 이것 좀 보자 여기, 나는 아주 전형적인 것을하고 있습니다 나는 계층 구조를 가로 지르고있다 그래서 컨테이너와 리프 요소가 있습니다 컨테이너는 서로 중첩 될 수 있습니다

리프 요소가 거기에 있습니다 모든 잎 요소는 텍스트를 포함하고 I 이 계층 구조에서 모든 텍스트를 추출하려고합니다 꽤 직설적 인 그래서 수업은 세 줄의 코드입니다 별로

요소가 있습니다 아이들 목록이있는 컨테이너가 있습니다 텍스트가 있습니다 자, 나는 이것을 가로 지르고있다 그래서 확장 기능을 사용하고 있습니다

내가 말했듯이 나는 모든 최상위 함수를 사용하고 있습니다 그래서 괜찮아요하지만이 코드가 마음에 들지 않아요 왜 내가 그걸 좋아하지 않니? 여기에서 계층 구조를 탐색하려면 재귀가 필요합니다 그래서 문자열 빌더를 스택 아래로 전달해야합니다

내가 나무를 추락 할 때 그것에 덧붙여 라 그렇다면 최상위 함수로 끝납니다 여기 에선 이것 만 필요합니다 그래서이 곳은 어디에도 필요하지 않습니다 그러나이 함수 내부

그래서 제가 정말로하고 싶은 것은 그냥 안에 넣어 두는 것입니다 그냥 여기 가서 로컬 기능으로 만드십시오 다시 한번, 다른 사람이 필요로하지 않는다는 것을 표현하는 것입니다 더 이상 개인 도우미가 필요하지 않습니다 지역 조력자를 찾는다

그리고 이것은 조금 향상시킬 수 있습니다 실제로 클로저를 사용할 수 있습니다 그래서 여기서 문자열 제작자를 만들 수 있습니다 이 모든 것을 제거하십시오 따라서 여기서 매개 변수를 반환하거나 가져갈 필요가 없습니다

여기에 필요한 것은 위에서 선언 한 것을 사용하는 것입니다 그리고 나서 나는 e의 텍스트를 여기에서 추출한다 문자열 작성기를 toString으로 리턴합니다 ExtractText– 아, 죄송합니다 연장 기능이 맞죠? 아뇨, 미안 해요

그래, 그럼 어떻게되는지 알아 보자 무언가를 지역 기능으로 바꾸고 활용할 수 있습니다 폐쇄 그래서이 변수는 내 함수 밖에서 선언됩니다 바깥 바깥에있는 사람들은 접근 할 수 없습니다

그리고 저는 여기서 그것을 사용하고 있습니다 이제는 로컬 함수, 확장 함수, 최상위 함수, 기본 매개 변수를 사용하십시오 그들은 당신의 코드를 더 좋게 만들 것이다 이제는 아직 무엇이 있는지 살펴 보겠습니다 회색 코드가 보이십니까? 회색 코드는 쓸모가 없습니다

IDE와 컴파일러는 무언가가 아니라는 것을 보여줍니다 거기에 필요했고 실제로는 그렇지 않습니다 이 클래스는 여기에서 확인했기 때문에이 클래스는 중복되었습니다 그래서 이것을 제거 할 수 있습니다 그리고 네가 본다면 나는 모른다

오, 예, 당신은 – 텍스트 변수는 녹색으로 변했습니다 녹색 인 이유는 무엇입니까? 컴파일러가 당신을 위해 캐스트를 알아낼 수 있기 때문입니다 실제로는 훨씬 안전합니다 그것은 편리 할뿐만 아니라 나는 그 곳곳에서 내 캐스팅에 정말 화가났다

그래서 나는 그것이 텍스트임을 압니다 왜 몰라? 자, 이제 알았어 실제로이 변수가 필요하지 않습니다 유일한 용도이기 때문입니다 그리고 여기서도 마찬가지입니다

그리고, 제 컨테이너는 인라인이 될 수 있습니다 그래서 여기 있습니다 스마트 캐스트를 사용할 수 있습니다 코드를보다 안전하고 간결하게 만듭니다 그리고 실제로, 그것은 여전히 ​​모든 캐스트를 만듭니다

귀하의 프로그램에 의미가 있습니다 그래서 지금 Kotlin에서 as 연산자를 볼 때, 당신은 그것이 무엇인가를 의미한다는 것을 압니다 그것은 단지 쓸데없는 칭찬이 아닙니다 위의 체크 또한이 일은 내가하고있는 일 때문에 어리 석다

나는 모든 것에 동일한 기능을 적용하고 있습니다 그리고 그것은 하나의 기능입니다 그래서 제가하고 싶은 것은 이것과 같습니다 그것은 조금 더 좋게 보입니다 그리고 우리가 가지고있는 것을 보도록하겠습니다

우리는 계층 구조를 가로 지르고 있습니다 나는 내 나뭇잎이있다 나는 용기를 가지고있다 그게 제가 표현하고 싶은 것입니다, 그렇죠? 나는 다른 경우를 확인하고있다 그래서, when 문을 사용하는 것이 훨씬 더 좋다

유형을 바로 여기에서 전환 할 수 있습니다 그러나 그것에 대해 성가신 일이 있습니다 그리고 그것은 다시 옛날 습관에서 비롯된 것입니다 나는 가까운 계층 구조를 선언하고있다 컨테이너와 텍스트 만 있습니다

나는 다른 것을 가지고 있지 않다 하지만 지금은 여기이 귀찮은 사건이 있습니다 왜? 컴파일러는 아무 생각이 없기 때문에 컨테이너와 텍스트 이외에는 아무것도 없습니다 그것은 단지 추상적 인 클래스이고 거기에 어떤 경우가 있습니다

하지만 실제로 Kotlin에서 이것을 봉인으로 표현할 수 있습니다 봉인 된 클래스를 가질 수 있습니다 모든 하위 클래스가 알려져 있습니다 이 파일 밖에서 파일을 선언 할 수 있습니다 그리고 이렇게하면 IDE와 컴파일러가 이 다른 것이 쓸모 없다는 것을 알아라

그래서 우리는 거의 두 화면의 코드에서 출발했습니다 하나 이하로, 단순히 Kotlin의 숙어를 적용 이 코드에 질문 있니? 죄송 해요 괜찮아 자 이제이 연습을 계속하겠습니다

쓰여진 표현의 몇 가지 예를 살펴보십시오 마음에있는 오래된 습관과 같습니다 그리고 우리는 그것들을 더 나은 것으로 바꾸려고 노력할 것입니다 따라서 여기서 가장 눈에 띄는 것은 var입니다 나는 결코 var를 사용하지 않는다고 말할 수 없다

Vars가 유용합니다 가변 변수는 많은 좋은 것들에 사용될 수 있습니다 그러나 낙담 한 모양입니다 var가 필요한 경우 아주 좋은 이유가 필요합니다 여기 val을 사용하는 것은 당연한 이유가 아닙니다

그런 다음 여기에서이 세 가지를 살펴 보겠습니다 그것은 반복입니다 반복은 추악합니다 반복은 오류가 발생하기 쉽습니다 특히 이것이 하나의 이름은 아니지만 많은 것들이 쇠사슬에 묶여 있다면

그래서 나는이 반복을 없애고 싶다 제가 할 수있는 말은 전 (ex)입니다 누구는 파스칼을 기억합니까? 파스칼, 누구? 오 좋네 좋은 나는 거의 파스칼에서 시작했다

그래서 그것은 이상한 것이 었습니다 그것은 건물 구조였습니다 Kotlin에서 그것은 기능입니다 우리는 그것을 사용할 수 있습니다 그리고 여기, 우리는 모든 전 것들을 제거 할 수 있습니다

여기, 이렇게 그리고 지금은 더 바보처럼 보인다 나는 단지 같은 변수에 할당하고있다 그러지 마 좋아, 이제는 문자열에 뭔가 더한 프린트 라인이있다

문자열과 무언가, 문자열과 무언가 어색해 대부분의 언어는 이제 문자열 보간법을 사용합니다 Kotlin도 그렇게합니다 여기 실제로 필요한 것은 이것입니다

이걸로 끝났어 를 사용하여 범위로 항목을 가져옵니다 문자열 보간법을 사용하면 좋습니다 이제 여기, 나는 옛날 방식으로지도를 만들고 있습니다 이런 식으로 좀 더 좋게 만들 수 있어요

내 연산자를 사용하여,하지만 정말 더 좋네요 빌더 함수를 사용하면됩니다 그래서 제가 여기서 할 수있는 일은 모든지도 것들을 쌍으로 대체하는 것입니다 아, 쌍은 아니지만 쌍 죄송합니다

이야기 할 때 타이핑하기가 어렵습니다 네지도는 쌍으로 만들 수 있습니다 그렇죠? 지도는 키와 값의 쌍으로 이루어진 집합이었습니다 그러나 실제로, 쌍은 이것에서 일종의 중복입니다 그래서 우리는 보통 여기에 함수를 사용하고 있습니다

내장 연산자가 아니라 라이브러리 함수입니다 여기, 그래서 당신이지도를 만드는 방법입니다 그리고 당신이지도를 가로 질러 가고 싶을 때, 당신은 여기에 열쇠와 가치를 말할 수 있습니다 이 같은 변수를 사용하면 for 루프는 훨씬 간결합니다 이 코드 예제는 if 문을 사용하여, Java에서 코드를 정말 싫어하는 것입니다

이 과제는 여기에서 모두 다 떨어지기 때문에, 그래서 나는 Kotlin에서 이런 일을 정말로하고 싶습니다 그래서, 그리고 많은 다른 것들은 실제로 표현입니다 이것은 꽤 익숙하지 않은 무언가이다 C 언어 패밀리 우리는 코드를 문장으로 나눌 때 익숙하다

표현, 맞죠? 문장은 효과가있는 것입니다 표현은 가치가있는 것입니다 따라서 변수에 표현식을 지정하고 명령문을 작성합니다 사물에 물건을 할당하는 것 그래서 코 틀린은이 절차 적 전통의 중간에 있습니다

기능적 전통 너보다 표현이 더 많아 다른 언어로는 익숙하다 그래서 여기서 할 수 있습니다 물론 var를 사용할 필요는 없습니다

다른 라인을 만들 필요가 없습니다 그리고 즉시 할당 할 수 있습니다 그래서 표현이라면 더 좋게 만드십시오 그건 그렇고, 표현의 결과 블록의 마지막 것입니다 그 때도 마찬가지입니다

단순히 스테로이드로 케이스를 전환하지 않는 경우, 그것은 크게 중요하게 표현입니다 그럼 너도 그렇게 할 수 있지, 그렇지? 여기에 많은 반품은 없지만 여기로 돌아 오는 반품은 훨씬 좋네요 물론 자신을 반복하지 않아도됩니다 그리고 당신도 이것을 말할 수 있습니다 그건 그렇고, 뭔가 이상하고 평평한 지 확인하고 싶다면, 나처럼하지 마

데모 용입니다 집에서 이것을 시도하지 마십시오 상처받을거야 그래, 이렇게하면 더 간단해질 수있어 그래서 다시, 당신은 소음을 제거하려고합니다

이런 코드를 보았을 때, 그냥 소음을 없애려고 노력하십시오 소음은 뇌에 해로울 수 있습니다 마지막으로, 무엇에 대한 간단한 데모 null 허용 여부를 결정하십시오 그래서 이러한 물음표는 nullable 유형에 익숙합니다 코 틀린에요? 몇 명? 나는 정말로 빨리 갈 것이다

따라서 nullable 유형을 사용할 수 있습니다 그리고 컴파일러는 이런 일을합니다 그래서 지금 거기에 있습니다 문자열은 null입니다 당신은 역 참조 할 수 있습니다

이 작업을 수행 할 수 있습니다 나를 비유하다 그건 그렇고, 여기서 할 수 있어요 뿐만 아니라 주위에 if를 쓸 필요가 없습니다 그리고 실제로 이렇게 단순화 할 수 있습니다

또 다른 좋은 점은 이런 식으로 엘비스 연산자를 사용하면 if 문을 무언가에 넣습니다 그리고 이것은 분명히 호기심이 생깁니다 표현의 위치에, 맞지? 엘비스는 어떻게 일하는거야? 엘비스는 문자열의 왼쪽에 표현식을 취하고, 너는 정말로 널 멋지다 그리고 만약 그것이 null이라면, 그것은 오른쪽을 평가합니다 그러나 오른쪽은 표현이어야합니다

맞습니까? 기본적으로 기본 설정으로되어 있습니다 그래서 당신이 지금 왼쪽에 있다면, 오른쪽에 기본값을 사용하십시오 그러나 귀하의 불이행은 단지 반환 일 수 있습니다 이는 어떤 값도 계산하지 않는다는 것을 의미합니다 방금 함수에서 뛰어 내린다

그리고 그것은 타입 시스템에서 꽤 흥미로운 것입니다 관점,하지만 난 여기서 강의를하지 않을거야 나는 데모를하고있다 좋습니다, 우리는 표현에 능숙합니다 기능적 스타일을 살펴 보겠습니다

그래서 사람들은 매우 자주 코 틀린을 언급합니다 기능적 언어로서 나는 그것이 사실이라고 생각하지 않는다 나는 Kotlin이 다중 패러다임 언어라고 생각한다 기능 스타일을 지원합니다

당신은 Kotlin에서 기능을 쓸 필요가 없습니다 그러나 종종 그것을하는 것이 매우 좋다 그래서 이것에 대해 살펴 보겠습니다 그래서 자바를 염두에두고 옛날에는 이 코드를 작성했습니다이 코드는 숫자 목록을 처리합니다

16으로 나눌 수있는자를 선택합니다 다음 16 진수로 변환합니다 그럼 필터 맵이 실제로하는 일입니다 맞습니까? 지도는 이쪽, 필터는 이쪽입니다 그래서 내가 할 수있는 것은, 심지어 나의 IDE의 도움으로, 나는 이것을 할 수있다

모든 프로그래밍 언어의 새로운 버전 이런 게있어 확실히 활용할 수 있습니다 따라서이 필터는 함수입니다 이 람다는 함수 값입니다 그건 그렇고, 변수로 선언하지 않아도됩니다

너는 그걸 없애 버릴 수있어 이것이 λ 매개 변수입니다 Kotlin은 훌륭한 반 기능적 일을 가지고 있습니다 코드에서 어디에서나 말할 수있는 것처럼 말할 수 있습니다 너는이 가치를 가지고있다

나에게도 해줘 나를위한이 목록 그리고 나서 당신이하고 있던 일을 계속하십시오 결코 마음에 들지 않는 것처럼, 이것은 단지 디버그 출력이거나 어떤면이다 효과 나는 여기에 삽입하고 싶다

한편으로는 부작용이별로 작용하지 않습니다 반면에 이것은 디버깅에 매우 유용합니다 당신은 당신의 사슬을 분해 할 필요가 없습니다 등등 또한 let을 사용하고, run을 사용하고, 등등을 사용하십시오

기능적 추상화에 대한 한 가지 중요한 점이 있습니다 비 기능 언어로 이런 일을하면 반복 기능이 생깁니다 바로 여기, 그렇지? 그래서 그것이 무엇인지, 그것은 숫자를 필요로합니다 나는 무언가를 반복하고 싶다

그리고 이것은 무엇인가 기능입니다 그건 그렇고, 당신은 자신의 기능을 발명 할 필요가 없습니다 인터페이스를 사용할 때마다 여기에 함수 유형을 사용하십시오 그것은 int를 취하거나 하나의 단위를 취하는 함수입니다 단위 란 당신이 신경 쓰지 않는 어떤 것입니다

그런 다음 간단히 반복합니다 그래서 내가 반복을 말할 때, 나는 언제나 무엇에 대해 아주 많이 의식하고있다 그것은 저를 요하기 위하여려고하고있다 그래서 그것은 기능입니다 매개 변수로 람다를 사용합니다

그래서 실제로는 또 다른 매개 변수입니다 Kotlin 관례는 그것을 괄호 밖에서 쓰는 것입니다 이런 언어 구조와 더 비슷해 보입니다 그런데, OK, 나는 이것을 달리고있다 나는 람다 객체를 생성해야한다

매번 람다 객체를 생성해야한다 이런 식으로하세요 따라서이 추상화에는 비용이 듭니다 좋은 코드예요 나는 물건을 재사용 할 수있다

코드에서 추상화 수준을 높일 수 있습니다 그러나 그것에는 유료 도로가 있습니다 실제로 Kotlin에서, 당신은 매우 자주 제거 할 수 있습니다 녹색 람다의 통행량 중 – 람다 객체 – 인라인 함수 만 사용하면됩니다 내가 인라인이라고 말할 때, 내 코드는 변하지 않습니다

그래서 여기, 내가 볼 수있는 콜 사이트에서 아무 일도 없었습니다 그러나 내가 쇼 코 틀린 바이트 코드를 말하면, 이것을 자바로 디 컴파일하면됩니다 조금 겁 먹을 뿐이에요 지금까지 쉬운 이야기가 많이있었습니다 내가 이것을하면 – 여기에 그것은 간단합니다

내 람다는 어디 갔지? 글쎄, 컴파일러는 단순히 그것을 최적화했다 람다가 필요하지 않습니다 따라서 여기에 루프가 있고 모든 것을 인라인하면, 당신은 루프로 끝납니다 그게 전부 야 사고 방식의 큰 차이 자바 프로그래밍 언어 Kotlin 프로그래밍 언어에 아직도 람다를 사용하고 있지만, 람다 중 일부는 정말 무료입니다

그리고 그런데이 모든 것들도 무료입니다 표준 라이브러리에있는 수많은 람다 자유로운 추상화이다 당신은 그 (것)들을 부를 것을 지불 할 필요 없다 그것은 단지 당신을 위해 생성 된 코드 일뿐입니다 코 틀린에서 기능적 일뿐만 아니라 편리합니다

싼 말하자면 싸구려,이 예제를 살펴 보겠습니다 그래서 여기에서는 병렬 계산을하려고합니다 글쎄, 그건 바보 같은 표본이야 누구도 베어 스레드에서 병렬 계산을 수행하지 않으며, 등등

하지만 한 가지 요점을 설명하고자합니다 그래서 내가 여기서하고있는 것은, 다시, 내 오래된 습관을 염두에두고, 나는 100,000 개의 실을 만들고 있습니다 각각 10 만개의 스레드가 있습니다 사실, 1 초 동안 잠을 자면 숫자가 인쇄됩니다 그리고 나서이 모든 스레드에 참여해야합니다

내 주요 스레드 그럼 내가 이걸 실행하면 – 오, 오, 오, 그건 예외 였어 그게 뭐야? Java lang out of memory 오류입니다 기본적으로 나 한테 말하는거야, 이봐, 너 100,000 개의 스레드를 생성 할 수 없습니다 너 거기서 미치니? 100,000 스택입니다

그것은 기억에 맞지 않습니다 그냥 합리적 이군 그리고 그것은 공평합니다 OS 스레드는 저렴하지 않습니다 스레드에 대한 자원을 할당해야합니다

그래서 당신은 실로 그런 바보 같은 짓을하지 않습니다 그러나 나는이 예를 coroutines를 통해 가지고있다 코 틀린에서 코 루틴에 대해 누가 압니까? 오 좋네 프로덕션에서 누가 그들을 사용합니까? 좋아, 곧 너희 모두는 그것들을 사용할거야 그러니 여기서보세요

그것은 매우 동일한 코드입니다 그래서 여기에 나란히 놓을 것입니다 매우 많은 코드가 있지만 여기의 스레드 대신에, 코 루틴을 사용하는 비동기 작업을 만들고 있습니다 아래에 그래서 저는 여전히 1 초를 기다리고 있습니다

그리고 이걸 실행하면 기억이 없습니다 모든 숫자를 인쇄하고 있습니다 다시 코 틀린은 코 루틴을 도입했습니다 비동기로 만드는 수단으로 더 나은 계산 그게 효과가 있지만 그 비용은 얼마입니까? 그래서 그것의 비용은 적어도 더 싸다

각 계산마다 스레드가있는 것보다 물론, 아무도 그렇게하지 않습니다 그러나 여전히 코 루틴은 매우 싸다 당신은 100,000 개의 코 루틴, 100 만개처럼 스핀 할 수 있습니다 코 루틴 (coroutines)을 사용하면 비용이 거의 들지 않습니다 그 옛날 실처럼

코 루틴이 실제로 무엇인지 설명해 드리겠습니다 여기 좋네 여기에 레거시 인터페이스가 있습니다 나도 몰라 또는 [부적절한] 인터페이스 – 뭐든간에

그래서 우리는 비동기로 만들기 위해 종종해야만하는 일입니다 또는 우리의 의존성을 뒤집는 것과 같은 것을 만들거나, 등등은 콜백입니다 그래서 나에게 무언가를 해달라고 부탁하십시오 내가 너에게 해줄거야 그리고 내가 끝나면 알려주지

그래서 여기에 모의 서비스, 요청 및 콜백이 있습니다 함수가 전달됩니다 따라서 주석의 작업이 완료되면, 콜백을 호출하고 거기에 내 대답을 전달합니다 그래서 괜찮습니다 모두를 위해 일하고 있습니다

맞습니까? 그러나 이것은 코드가 다음과 같은 경우입니다 두 서비스간에 메시지를 교환하고 싶습니다 그래서 기본적으로 두 개의 메시지를 순서대로 보내고 싶습니다 그리고 여기에 내가해야 할 일이 있습니다 먼저 요청하십시오

그럼 콜백 이것은 요청의 결과입니다 나는 그것을 인쇄한다 그 콜백 내에서 다음 요청 그런 다음 안에 인쇄하십시오

그럼 여기 계단이 보이지, 그렇지? 한 걸음 오, 미안 한 단계, 두 단계, 세 단계

그리고 당신은 실제로 꽤 깊어 질 수 있습니다 이 계단을 내려 가면 좋지 않습니다 그래서 내가 정말로하고 싶어하는 것은 조금 더 간단합니다 하지만 이것은 일종의 용인입니다 하지만 만약에

그냥 상상해보십시오 n 통화와 같이해야합니까? 전화 번호를 정하는 것뿐입니다 이것이 제가 생각해 낸 코드입니다

전혀 좋지 않습니다 그래서 분명히 거기에 재귀가 필요합니다 콜백 내에서 콜백을 중첩해야하기 때문에 콜백 내에서, 맞지? 따라서 재귀가 필요합니다 이것은 내가 생각해 낼 수있는 가장 짧은 코드입니다 배열을 복사합니다

그러지 마 기억의 측면에서 낭비입니다 시간 낭비이다 그것은 2 차입니다 하지만 기본적으로, 당신은 올라와야합니다

이런 식으로 – 둥지 콜백처럼 콜백으로 콜백합니다 그래서 당신은 말할 수 없습니다, 좋아, 이것을 5 번 반복하라, 그렇지? 그래서 내가 정말로하고 싶어하는 것은 이 말처럼, 내가 방금 말한대로, OK, 하나의 요청 보내기, 결과를 기다리고 다른 요청을 보냅니다 그리고 내가 뭔가 반복하고 싶다면, for 루프로 반복하면됩니다 그래서이 코드는 실제로 같은 콜백을 사용하고 있습니다 코 루틴 추상화 만이 이것을 배포하고 있습니다

나에게서 따라서 실제로 콜백 기반 API를 사용할 수 있습니다 지금, 이것으로 바꾸세요 똑바로해라 몇 줄의 코드 만 있으면됩니다

내가 보여줄거야 그래서 이것은 동일한 서비스를 호출합니다 내가이 기능을 여기에 가지고 있기 때문에 그래서 내가하고있는 일은 요청을 돌리고 있습니다 이 단순한 구조를 통해 서스펜션 기능으로 내 콜백 서비스의 확장 기능입니다

내가 말하는 첫 번째 것은 내 coroutines를 중지합니다 그래서 나는 코 루틴에 있다고 가정하고 있습니다 나는 그것을 즉시 중단했다, 나는 나의 연속을 얻는다, 나는 나의 요구를한다 그게 전부 야 나는 정지 됐어

나는 요청을 기다리고있다 그래서 거기에 있습니다 그리고 요청이 완료되면, 나는 코 루틴으로 다시 시작한다고 말합니다 그게 전부 야 따라서이 간단한 코드를 사용하면 콜백 기반 API를 사용할 수 있습니다

coroutine API로 변환 할 수 있습니다 죄송합니다이 코드를이 코드로 만듭니다 제 감각으로는 훨씬 더 읽기 쉽습니다 당신이 그것을 좋아합니까 방법? 좋아, 관중석에 고개를 끄덕 거리다

고맙습니다 그래, 사실, 네가 원한다면 여기에 더 신중하게 – 그리고 네가 원한다고 확신 해 캐치 예외가 필요합니다 따라서 예외를 처리하는 것은 매우 중요합니다 그리고 이것만큼 쉽습니다

예외를 잡으십시오 무슨 일이 생기 든 오, 미안해

물론 여기가 아닙니다 귀하의 요청에 따라 어떤 일이 일어나든지, 그냥 잡으려고하고 resumeWithException 그래서 이것은 coroutines를 통해 예외를 전파 할 것입니다 아주 잘 그리고 여러분은 여기에 시도 잡기를 쓸 수 있습니다 – try catch와 함께 이것을 둘러 쌉니다

미안, 뭐든간에 예외를 잡아라 마치 순차적 코드처럼

그러나 밑에는 모두 비동기식입니다 이와 같은 asyncio 파일 시스템과 같은 HTTP 요청을 수행 할 수 있습니다 필요한 모든 것을 백그라운드 스레드로 처리 할 수 ​​있습니다 어떻게 좋지 않니? 그리고 나는 오늘 당신에게 보여줄 마지막 예를 생각합니다 이거 야

코 루틴이 어떻게 당신을 도울 수 있는지에 대한 또 다른 대변입니다 보세요 그래서 내가하고 싶은 것은 무한한 숫자의 흐름 무한한 숫자의 흐름을 좋아하는 사람은 누구입니까? 나는 그들을 아침 식사로 먹는다 그래서 나는 피보나치 시퀀스를 생성하기를 원합니다

그리고 나서, 나는 그들 중 20 명을 취할 수 있습니다 여기, 단지 20의 시퀀스 나는 200, 2,000 걸릴 수있어 필자는 필터링, 맵핑, 슬라이스 할 수 있습니다 이 buildSequence 함수는 라이브러리 함수입니다

Kotlin 표준 라이브러리에 있습니다 그리고 실제로 coroutine과 같은 메커니즘을 기반으로합니다 백그라운드 처리는하지 않습니다 그것은 모두 같은 스레드에 있어요 그것이 무엇인지, 그것은 여기에서 모든 산출량 진술을 취합니다, 그들을 순서대로 놓습니다

그래서 제가 여기서 무언가를 양보하고 싶다면, 그냥 할게요 나는 내 서열에 2를 삽입한다 내가 원한다면– 말하자면, tmp가 10보다 크면, 계속 – 나는 내 논리의 조각들을 건너 뛸 수있다 그래서 그것은 어떤 코 루틴처럼 간단합니다 그것은 당신에게 게으른 순서를 제공합니다

그래서 테이크 어웨이 수업은 저렴합니다 함수는 최상위 또는 로컬입니다 과부하가 없어서 기본값을 에뮬레이션합니다 속성 사용, 위임 된 속성 사용, 코 루틴 사용 좋은 Kotlin을 보내십시오 그리고 저는 오늘 좀 더 많은 활동을 광고하고 싶습니다

그래서 내가 아직 취할 수없는 질문이 있다면, 우리가 근무하는 12시 30 분까지 갈 수 있습니다 샌드 박스 영역으로 이동할 수 있습니다 우리가 코 틀린 부스에있는 C 적어도 하루는 그리고 내 이야기 ​​직후에 Jake Wharton의 Android KDX에 대한 이야기입니다 매우 흥미 롭습니다

2 단계에 있다고 믿습니다 그래서 거기에 오신 것을 환영합니다 주의 해 주셔서 대단히 감사합니다 [박수 갈채] [음악 재생]

Android Jetpack: sweetening Kotlin development with Android KTX (Google I/O ’18)

[음악 재생] JAKE WHARTON : 안녕하세요 제이크는 제이크입니다

코틀 린 물건에 대한 안드로이드 팀에서 일하고 있습니다 오늘은 Android KTX에 대해 이야기 할 것입니다 그리고 난 그냥 가지 않을거야 거기에있는 물건들을 묶어서 나는 그것보다 조금 더 재미있게 만들고 싶다 그래서 나는 약간의 일부터 시작하려고합니다

작년에 Google I / O에서 작년에 여기 있었는데 Android 유형에 대한 확장 기능을 작성할 수 있습니다 이 예와 같이 ViewGroup 내부의 뷰를 반복하는 코드 이 일반 코드를 확장 프로그램으로 가져올 수 있습니다 그리고이 확장이하는 일은 타입을 향상시키는 것입니다 우리가 통제하지 않는 ViewGroup 유형

기본적으로 멤버 함수를 만들 수 있습니다 그건 실제로 멤버 함수가 아닙니다 실제로 바이트 코드에서 정적 함수로 변합니다 우리가 향상시키고 자하는 기능으로 그래서 우리는 원래 코드를 취할 수 있습니다 명시적인 for-loop가 있었고이 새 멤버를 사용합니다

우리가 의도 한 것의보다 간결한 버전을 만들 수 있습니다 실제로 시각적으로 구분됩니다 일반 멤버 함수에서 이탤릭체로 표시됩니다 어두운 황색을 사용하면 실제로 노란색이됩니다 그러나 이것은 회원에게 전화하는 것과 의미 상으로 동일합니다

또는 의의는 의미 상 동등한 느낌을주기위한 것입니다 그리고 자주 시작됩니다 확장 기능에 대해 이야기하고, 당신이 생각하기에, 음, 이것이 아주 유용하다면, 왜 우리는 D 그룹에 직접 기능을 넣지 않습니까? ViewGroup은 왜 for-each와 for-each 인덱스를 제공하지 않는가? 람다를 필요로합니까? 그리고 정말로, 그 이유는 람다 때문입니다 우리가 Java 8이나 Kotlin에서 lambda를 넘길 때, 기본적으로, 그 방법을 먹는 익명의 클래스를 만들어야합니다 클래스 로딩을 유발합니다

그러나 Kotlin은 언어 기능, 우리는 그 람다의 할당을 제거 할 수 있습니다 함수를 인라인으로 표시함으로써, 확장의 본문이 호출 사이트로 복사되고, 우리는 제로 오버 헤드 추상화가 있습니다 다른 예를 살펴 보겠습니다 API 23에서 우리는 시스템 서비스를 얻을 수있었습니다 클래스 유형에 따라 그리고 27

1 개의 지원 도서관에서, ContextCompat 버전은 모든 API 수준에서 작동하도록 추가되었습니다 이것을 인라인 인 확장 프로그램으로 가져올 수도 있습니다 이전과 같지만 람다를 포함하지 않습니다 이게 다른 점은 무엇입니까? reified라고하는 것입니다 자, 이것은 컴파일러 트릭입니다

그 트릭이하는 일은 타입 정보 컴파일 타임에 알려진 일반의, 런타임에 사용 가능하도록 만들 수 있습니다 그래서 이것이 우리가 할 수있는 것입니다 그렇지 않으면 우리는 classjava를 호출 할 것입니다 알림 관리자에서 이제 그 정보를 추상화 할 수 있습니다

이 연장 뒤에 그래서 우리의 호출 코드가 이제는 단순화되었습니다 제네릭을 통과 할 수 있어야합니다 그리고 그것이 구체화 되었기 때문에, 그것의 구현은 classjava를 호출 할 수있는 액세스 권한이 있습니다

따라서 뷰의 패딩을 업데이트하려면 우리는 4 가지 중 2 가지만 지정합니다 매개 변수 -이 경우에는 왼쪽과 오른쪽 모두를 업데이트합니다 우리는 기존 패딩을 꺼내야합니다 안드로이드가 필요하기 때문에 상단과 하단에 대한 당신은 네 가지 모두를 지정해야합니다 이것은 우리가 다시 치료할 수있는 것입니다

확장 기능을 사용합니다 여기서 핵심은 각 인수에 대해 우리가 정의한이 새로운 기능에 대해, 우리는 기본값을 지정하고 있습니다 그리고 그 기본값 해당 인수에 값이 제공되지 않을 때 사용됩니다 그래서 우리는 호출하는 코드를 우리는 4 개 모두를 지정하고 있으며, 이제는 2 개로 지정합니다 하지만 여기서 문제는 우리가 제거한 것입니다

두 가지 주장 그러나 우리는 두 가지를 공급하기 때문에, 코 틀린 (Kotlin)은 이것을 처음 두 가지 의미로 생각합니다 후자의 두 개는 기본값이 사용되는 곳입니다 이것은 우리가 의도 한 바가 아닙니다 우리는 왼쪽과 오른쪽, 그것은 첫 번째와 세 번째입니다

또 다른 언어 기능이 여기에 도움이되는데, 이름이 매개 변수입니다 매개 변수의 이름을 지정함으로써, 우리는 컴파일러에게 두 개의 인수 중 어떤 것을 말할 수 있습니다 우리가 지정하고 그것을 채울 수 있도록 다른 사람의 기본값은 승인 Android API에는 여러 가지 복합 유형이 있습니다 이들은 점, 직사각형, 쌍과 같은 것들입니다

심지어 위치 클래스 이러한 복합 유형은 단지 래퍼 일뿐입니다 작은 개별 데이터 조각 주위 이 경우 사각형이있는 API를 호출합니다 그것은 네 개의 주위를 둘러싼 합성물입니다 – 왼쪽, 위쪽, 오른쪽, 그리고 바닥 – 직사각형의 값

계산을해야하는 경우 이러한 복합 형의 내부의 값에 근거 해, 당신은 그것들을 개별적인 값들 또는 변수들로 끌어 내야 만합니다 그 계산을하기 위해서 그리고 잠재적으로, 그들을 다시 모으십시오 확장의 도움으로이 문제를 피할 수 있습니다 이것은 약간 다릅니다 연산자라는 새로운 키워드가 있습니다

운영자는 Kotlin이 특별한 호출 사이트 구문을 사용할 수있게 해줍니다 그리고 각 연산자 함수는 매우 구체적인 이름을 가지고 있습니다 잘 알려진 이름 당신은 어떤 이름도 만들 수 없습니다 그리고 그 이름은 당신이 어떤 콜 사이트 구문을 정의하는지 창조하려고합니다

이 경우 구성 요소라고합니다 그리고 구성 요소를 사용하면 기능을 사용할 수 있습니다 Kotlin의 파괴라고합니다 그래서 개별적으로 철수해야했던 우리의 원래 코드 네 가지 구성 요소가 이제이 호출 ​​사이트를 사용할 수 있습니다 사각형이 자동으로 작성된 구문 4 개의 값에 압축을 풀고 4 개의 변수에 할당 우리가 선택한 이름으로 이것에 대해 정말 멋진 점은, 나중에 그 사람에 대해 신경 쓰지 않는다면 그 사람을 생략 할 수 있습니다

그리고 당신이 중간에있는 사람들에 관심이 없다면, 그것들을 밑줄로 지정할 수 있습니다 그리고 만약 우리가 단지 두개의 값을 꺼낼 필요가 있다면, 우리는 그것을 매우 간결하게 할 수 있습니다 승인 숙련 된 Kotlin 사용자가 알 수도 있습니다 그게

음, 우린 뒤집혔을거야 슬라이드로 돌아갈 수 있을까요? 승인 이 코드는 어떻게 우리는 문자열에는 숫자 만 포함됩니다 기본적으로 문자를 반복합니다

Kotlin의 for-in 구문을 사용합니다 그것이 자인지 여부를 확인합니다 문자에 대한 확장 함수 사용; 값을 true 또는 false로 설정합니다 그것이 자릿수가 아닌 것을 발견 할 때마다 숙련 된 Kotlin 사용자 인 경우, 당신은 모든 기능에 대해 알고있을 것입니다

string 상에 존재하는데, 그것은 동일한 루핑을 캡슐화한다 술어를 지정할 수있게 해줍니다이 경우, 입니다 실제로는 인라인 함수입니다 그래서 우리가 가지고있는 것과 똑같은 일을 할 수 있습니다

이전 슬라이드에 썼다 그러나 흥미로운 점은 Android는 실제로 이것을위한 내장 함수 그리고 나는 많은 사람들이 실제로 이것이 존재한다는 것을 알지 못한다 그리고 이것은 우리가 실제로 취할 수있는 것입니다 확장으로

그러나 당신은 궁금해하기 시작합니다 연장에있는 그것의 무게? 이 정적 메서드를 사용하면 어떤 가치를 얻을 수 있습니까? 내선 번호로 전화 할 수 있습니까? 글쎄, 하나, 그것은 방법을 변경 우리가 더 자연스럽고 관용적 인 느낌을 갖기 위해 코 틀린에서 – 확실한 그러나 여전히, 우리가 이것에서 추출한 가치가 있습니까? 우리가 이걸로 얻은 것 중 가장 큰 것 IDE에있을 때 문자열이 있습니다 당신은이 질문을하기를 원한다 그것은 숫자 만 포함합니다

TextUtils의 정적 메서드가 있다는 것을 모르는 경우, 당신은 아마 그것을 결코 발견하지 못할 것입니다 확장 기능을 사용할 때 IDE에서 타이핑을 시작하면, 실제로이 확장 기능과 자동 완성 기능을 보여줍니다 다른 곳보다 훨씬 더 쉽게 발견 할 수 있습니다 Enter 키를 누릅니다 그리고 당신은 그것을 얻습니다

괜찮아 그래서 여기에 몇 가지 확장 기능을 설명했습니다 나는 너에게 조금 생각 나게하고 싶었다 이러한 확장의 힘, 사실 우리는 오직 존재하는 언어 기능을 활용하고 있습니다 Kotlin에서는 Java 언어가 아닙니다

실제로,이 예제 중 일부는 우리는 나머지 동안 계속 돌아갈 것입니다 이 이야기 그래서 내가 방금 보았던 모든 확장 기능들 Android KTX 라이브러리에 포함되어있다 2 월 초 발표했습니다 그 이후로 두 번의 발표가있었습니다

화요일 현재, 그것은 제트 팩 (Jetpack)의 일부입니다 Jetpack으로 버전이 지정됩니다 그래서 화요일에 Core-KTX는 10 알파 1이되었습니다 버전이 만들어지고 출시 될 예정입니다

미래의 젯팩 (Jetpack) 도서관이있다 그래서 우리는이 Core-KTX를 출시 할 때 호출했습니다 그것은 이상한 이름의 종류이었다 그것은 말이되지 않았습니다 이것은 프레임 워크에서만 유형의 확장을위한 것입니다

많은 사람들이 도서관 자료를 추가 할 수 있을지 제안했습니다 그리고 우리는 no라고 말하는 것에 대해 매우 단호했습니다 바라건대 지금은 훨씬 더 의미가 있어야합니다 그러나 이것조차도 사실이 아닙니다 Core-KTX가 처음에는 support-compat에 의존했기 때문입니다

Support-compat은 이전 버전과의 호환성을 제공합니다 Android 프레임 워크에있는 것들의 버전 이전에는 ContextCompat로 예제를 보여 줬습니다 이것은 support-compat에서 나온 것입니다 그리고 지금, 제트 팩 브랜드와 안드로이드 X 패키지, support-compat이 핵심이되었습니다

이제 Core-KTX는 Core와 함께합니다 그래서 우리는 우리가 무엇을하고 있는지 알았습니다 우리가 이것을 시작했을 때 그리고 지금, 그것은 단지 갚기 시작했습니다 다른 Jetpack 라이브러리와 함께, 실제로 몇 가지 새로운 KTX 라이브러리가 있습니다

그것으로 시작됩니다 그래서 우리는 fragment, collection, SQLite를 가지고 있습니다 최신 구성 요소, 탐색 및 작업 런타임 용 나중에 조금씩 발견 할 수있는 방법을 알려 드리겠습니다 하지만 범위 지정에 대해 조금 이야기하고 싶습니다

무엇을해야할지 여부를 결정하는 방법에 대해 이 라이브러리들 중 하나에 들어가십시오 괜찮아 그래서 Core-KTX 03에서는 확장 기능을 제공했습니다 그게 그렇게 보였어

서명을 보면 연산자입니다 그리고 그것은 색상으로 작동합니다 이름은 플러스입니다 그래서 이것은 우리가 정상적인 더하기 구문을 사용하여 추가, 함께 두 가지 색상 합성 서명은 확실히 확장입니다

하지만이 몸은 매우 다른 것처럼 보입니다 우리가 본 다른 확장보다 상당한 양의 코드가 여기에 있습니다 당신이 안으로 볼 경우, support-compat, 현재 코어입니다 컬러 유틸리티 클래스가 있습니다 그리고 그 컬러 유틸리티 클래스는 정수 색상에서 작동하는 합성 색상이라고하는 메소드입니다

전경과 배경을 가져갈 수 있습니다 그것들을 하나의 색깔로 바꾸십시오 구현을 배치하기에 적합한 후보입니다 그 확장 기능이 무엇인지 이 클래스에 모든 사람이 사용할 수 있도록 자바 언어에서 사용할 수 있습니다 또는 Kotlin 언어

그래서 Core-KTX 10에서는 실제로 해당 ColorUtils에 위임하기 위해 다시 작성되었습니다 따라서 Java 언어 사용자는 해당 기능을 사용합니다 그러나 Kotlin 사용자는 향상된 구문을 사용합니다 그리고 우리가 얘기 한 확장 기능을 살펴 본다면 지금까지, 그들의 몸, 구현 이 함수들 중, 그들은 모두 사소한 것입니다

그들은 대단히 사소하다 그리고 그것은 의도적으로 설계된 것입니다 그리고 이것은 나를 몇 가지 원리를 다루도록합니다 우리는 KTX 확장이 가져야한다고 정의했습니다 따라서이 첫 번째 기능은 기능을 적용하려는 것입니다

그것은 이미 존재합니다 새로운 기능을 추가하려면 그것들은 업스트림으로 리디렉션되어야합니다 그들은 언어 불가지론 자입니다 두 언어 모두 그들을 이용하십시오 이것의 다른 예 – 몇 가지 HTML compat stuff와 path iterator가있었습니다

이후 Core-KTX에서 처음으로 구현 된 코어로 업스트림으로 이동 가능 두 언어로 사용됩니다 이러한 모든 확장에 공통적 인 또 다른 사항 인라인으로 표시되어 있다는 것입니다 우리가 첫 번째 행을 인라인하는 이유는 맨 위에있는 것 – 람다 할당을 피하기 위해서입니다 두 번째의 경우, 우리가 수정 된 제네릭을 사용하고 있기 때문에, 우리는 실제로 컴파일러에 의해 인라인을 사용해야합니다 세 번째, 구성 요소 1, 맨 아래 1 모두 인라인입니다

네가 쓰지 않는 것에 대한 앨리어스 만 확장 기능이없는 경우 우리가 뭔가를 본다면 Core-KTX에는 인라인이 아닙니다이 반복자 확장자가 있습니다 우리가 Kotlin 's for / in을 사용할 수있게 해주는 ViewGroup에 뷰와 ViewGroup을 반복하는 구문 이것은 매우 구체적인 이유로 인라인되지 않습니다

그리고 그것은이 함수의 구현이 익명 클래스를 정의합니다 만약 우리가 이것을 인라인했다면, 당신이 그것을 사용하면 익명의 클래스가 호출 사이트에 정의됩니다 그래서 갑판의 크기, 방법 수, 및 클래스 로딩 우리는 명시 적으로이를 인라인으로 만들지 않습니다 우리는 단일 구현을 모든 발신자가 다시 사용할 수 있습니다

그래서 우리는 인라인이 아닌 확장 기능을 기본값으로 사용합니다 할당 이유 그리고 나는 이것이 정말로 KTX 스타일 확장 만 가능합니다 일반적인 Kotlin 코드에서 이것은 권장하지 않습니다 인라인 기본 설정을 원하지 않습니다

실제로 가지고있는 잠재력이 있기 때문에 긍정적 인 것보다는 당신의 코드에 부정적인 영향 괜찮아 그래서 우리가이 확장을 보여 주었을 때, 나는 인라인 수식어가 사실과 결합 된 방법에 대해 이야기했다 람다가 있다는 것,이 확장을 허용합니다 제로 오버 헤드 추상화

검증 된 경우, 우리는 능력을 얻습니다 더 많은 선언적 버전을 가짐 지정하지 않고도 호출 사이트에서 조회를 수행 할 수 있습니다 콜론 콜론 classjava 패딩을 업데이트하기 위해 기본값을 사용합니다

각 인수를 지정할 필요가 없기 때문에, 인수의 하위 집합을 지정하는 이름 매개 변수 우리는 실제로 제공하고자합니다 구조 조정의 경우에는 멋진 구문을 사용합니다 이를 통해 우리는 컴포넌트 변수를 분리 할 수 ​​있습니다 합성 오브젝트의 이것은 유용합니다 이것은 우리가 가지고있는 사실에 의해 가능합니다

Kotlin에서 연산자 오버로딩 우리는 또한 우리가 어떻게 더하기 색상을 추가 할 수 있었는지에 대해서도 이야기했습니다 이 경우 정적 메서드 확장의 별칭을 지정합니다 이는 발견 가능성을 높이는 데 도움이됩니다 당신이 그렇지 않으면 몰랐을 내장 헬퍼가 존재합니다

그리고 컬렉션과 유사하지만 그렇지 않은 유형의 경우 실제로 컬렉션, 우리는 능력을 가지고 그들을 가상 컬렉션으로 변환 우리는 언어의 용역을 사용할 수 있습니다 마치 실제 컬렉션 인 것처럼 그래서 이들 각각은 매우 Kotlin 특정 언어를 가지고 있습니다 사용하는 기능 그리고 우리는 이러한 모든 확장 기능이 Kotlin 언어의 일부 기능을 활용하도록 정의 자바 호출자에게는 그렇지 않다

우리는 API를 수정하는 것만으로도 확장 기능을 제공하지만 확장 기능을 제공합니다 레버리지를 사용하여 사용하는 것이 더 즐겁다 이러한 Kotlin 관련 기능 승인 우리가 자주 얻는 제안 중 하나 setOnClickListener와 같은 것을 가져 오는 것입니다

확장을 작성하면 Click 또는 OnClick과 같은 것을 사용하여 호출 할 수 있습니다 이것은 호출 코드를 허용합니다 setOnClickListener를 호출 할 필요없이, 클릭의 단축 버전을 얻습니다 이 언어의 기능을 활용하고 있습니까? 글쎄, 우리는 확장 함수를 사용하고 있지만 실제로는 그렇지 않습니다 우리는 단지 짧은 별명을 만들고 있습니다

이 확장 프로그램에서 얻을 수있는 가치는 무엇입니까? 글쎄, 우리는 몇 가지 적은 문자를 입력하고 있습니다 그러나 실제로, 그것은 어쨌든 자동 완성됩니다 그러나 더 나쁜 것은, 우리가 여기서 선례를 세울 것인가 이 확장 기능을 추가하여? 모든 청취자에게이 작업을 수행 할 예정입니까? 그래서 이것이 뭔가 좋은 예입니다 우리는 명시 적으로 KTX 라이브러리에서하고 싶지 않습니다 당신이 그 용어에 익숙하지 않다면, 우리는이 코드를 골프라고 부릅니다

가능한 한 최단의 코드를 만들려는 욕구를 가지십시오 이것은 우리가하고 싶지 않은 것이다 코드를 더 짧게 만들려고 여기에 온 것은 아닙니다 승인 지금은 또 하나의 제안이 있습니다

그리고 나는 사람들이 사용하는 것을 보았다 Android의 경우 다양한 API 레벨로 인해 우리는 아주 자주 당신을 지원해야합니다 SDK int 주변의 IF 검사를 참조하십시오 그래서 이것을 꺼내는 유혹을받을 수 있습니다 확장 기능으로 이것의 조금 더 많은 선언적 버전

비교를 확장 함수로 옮깁니다 인라인 함수이기 때문에 오버 헤드가 없습니다 람다는 마지막 매개 변수입니다 그래서 우리는 멋진 Kotlin 호출을 얻습니다 사이트 구문

그리고 이것은 우리의 IF 진술을 이것으로 변환합니다 자, 이것 자체만으로는 너무 끔찍하지 않습니다 우리는 실제로 어떤 언어 기능도 활용하지 않습니다 다시 말하지만, 마지막 것과 비슷하지만 여전히 별명입니다 하지만 최소한이 점은 조금 더 논쟁 할 수 있습니다

그것의 공로 때문에 그러나 문제가 있습니다 이 두 문장은 동일하지만, 오, 한가지는 최소한 정적 SDK SDK int, 그리고 나서 그들은 조금 더 가깝습니다 이것이 이것이 덜 타당한 이유 중 하나입니다 하지만 한 가지는 IF 문 프로그래밍 언어의 아주 원시적 인 구조입니다

IF 문은 IF 문이 아니기 때문에, ELSE와 같은 구조가 있습니다 요구 사항이 변경되면 어떻게 될까요? 이 두 가지 행동을 바꿔야한다고 다른 버전? 당신이 작성한이 확장 프로그램을 사용했다면, 이 사건을지지하기 위해 IF 문을 사용하여 다시 변경해야합니다 또는 함수를 수정해야하는 경우, 어쩌면 지금은 두 개의 람다가 필요합니다 한 명은 19 세 이상이고 한 명은 사건입니다 네가 아니야 이 함수에서는 두 개의 람다를 사용하지 않기 때문에, 우리는 특별한 후행 람다 구문을 잃어 버렸습니다

이제 우리는 내부적으로 인수로 전달해야합니다 괄호는 이전에 비해 우리는 그렇지 않았습니다 즉각적으로이 확장은 붕괴되기 시작합니다 다른 조건부 분기를 도입하면 어쩌면 API 전반에서 동작을 다르게해야 할 수도 있습니다 세 가지 다른 방법으로 – 글쎄, 우리가 확장 프로그램이이를 가능하게 할 수 있습니다

이 확장에 대해 다른 점은 IF 문과 비교하면 우리가 가정하고있는 것입니다 확인하고 싶은 조건부 보다 크거나 같음 우리가 람다에서 뛰고 싶은 행동, 우리는 단지 19 플러스에서 뛰고 싶습니다 글쎄, 많은 시간, IF 문 중 일부는 – 다시, SDK int -는 작거나 같을 것입니다 그리고 이제는 순서대로 두 번째 확장이 필요합니다 사용 사례를 지원합니다

그래서 이것은 뭔가의 또 다른 예입니다 우리가하려는 게 아니야 우리는 단 한 번의 사용으로 최적화하고 싶지 않습니다 사례 또는 특정 유스 케이스, 확장 만 한 가지 일을 지원합니다 그리고 나서 좀 더 복잡한 것으로 옮겨야 할 때, 당신은 원래의 행동으로 되돌려 야합니다

확장 프로그램을 통해 당신이 필요로하는 모든 것을 표현하기 그것이 존재하지 않는다면 표현할 수 있습니다 승인 지금까지 우리가 얘기해온 모든 확장 기능 Core-KTX 라이브러리에있는 것들이었습니다 나는 많은 연장을 겪고 싶지 않다 이 다른 도서관에 있습니다

다시 한 번 조금씩 발견 할 수있는 방법을 보여 드리겠습니다 하지만 나는 하나를 만지고 싶다 그래서 KTX 단편에는 확장이 있습니다 트랜잭션을 캡슐화합니다 beginTransaction과 commit 함수를 이동합니다

확장 기능으로 호출합니다 우리는 인라인 함수를 사용할 수 있다는 사실을 사용합니다 및 람다를 다시 0 오버 헤드로 변환합니다 맡은 일 우리의 호출 코드는 조금 더 짧아지고, 이제 우리는 람다 본문과 트랜잭션을 사용합니다

조각을 사용했다면 커밋이 유일한 커밋 기능이 아니라는 것을 알아라 실제로는 여러 가지가 있습니다 그래서 우리는 뭔가를함으로써 이것을 모델링 할 수 있습니다 같은 부울을 제공 할 수 있도록 상태 손실을 허용할지 또는 허용하지 않을지 여부 당신이 저지를 때 이것은 수용하기가 정말로 쉽습니다

그러나 그것은 일종의 무언가에 반대한다 나는 이전에 말했어 오, 우리는 이것을 사용할 수 있도록 콜 사이트를 업데이트 할 수 있습니다 내가 앞서 말한 것에 위배된다 구현의 영향을 최소화하는 방법에 대해 이야기했습니다

이러한 확장의 이것은 인라인 함수이기 때문에, 그리고 나서 우리는 이제 인라인 내부에 조건부를 넣습니다 함수, 그 조건부가 인라인되고있다 모든 콜 사이트로 그래서 모든 콜 사이트가 이제 그 내부에 조건부가 있어야합니다 이것은 실제로 나쁜 것입니까? 글쎄, 우리가 바이트 코드를 보면 호출 사이트에서 생성됩니다

우리가 허용 상태 손실을 true로 지정할 때 – 너는 정말로 이해할 필요가 없다 여기에서 무슨 일이 일어나고 있는지 이해하기위한 바이트 코드 기본적으로 세 가지 함수 호출이 있습니다 첫 번째는 beginTransaction입니다 두 번째는 람다 내부에 있던 교체 작업입니다

세 번째 것은 commitAllowingStateLoss에 대한 호출입니다 IF 문은 없습니다 조건부는 없습니다 그리고 이것은 인라인 함수이기 때문에 인수는 부울이므로, 컴파일러는 실제로 컴파일 타임에 가치 그리고 컴파일 시간에 알고 있기 때문에, 그것은 실제로 죽은 코드 제거를 할 수 있습니다

실행될 수없는 분기를 제거하십시오 그리고 실제로 바이트 코드에서, 당신이 그렇지 않으면 쓰려고했던 것과 동등한 것 실제로 커밋 기능이 많이 있습니다 지금 커밋하고 커밋 할 수있는 방법이 있습니다 따라서 우리는 추가 Boolean을 추가하여이를 지원할 수도 있습니다

그리고 똑같은 일이 여기서 일어납니다 이제 그들은 중첩되어 있지만, 데드 코드 제거 단 하나의 기능 만 있도록 결과 바이트 코드를 호출하십시오 승인 이러한 모든 I / O 릴리스의 노력의 일환으로, 우리가 한 일 중 하나 Kotlin 특정 생성을 시작합니다 Android에서 게시하는 라이브러리보기 프레임 워크 자체

그래서 보시다시피 그 파란색 상자에 참조 문서를 방문 할 때, 네가 원한다면 실제로 너에게 물어볼거야 Kotlin 특정 버전의 플랫폼을 보는 방법 또는 Android X 라이브러리 또한 왼쪽 탐색 창에서 아래로 스크롤하면 맨 아래에는 링크도 있습니다 그리고 이것들은 Kotlin의 이러한 라이브러리에 대한 견해입니다 그래서 여러분이 말하길, 조각을 볼 때 패키지를 사용하면 조각에 대한 확장 프로그램을 볼 수 있습니다

문서 안에 있습니다 더 이상 완전히 분리되지 않습니다 한 가지 당장 실종 됐어 우리가 너에게 실제로 말하지 않는다는거야 이것들이 유래 한 인공물의 좌표

곧 올거야 또한 Core-KTX의 확장, 플랫폼 유형을 확장하고 아직 플랫폼 문서에 표시됩니다 그러나 이것은 우리가 원했던 것이다 나가서 일하고 있다는 것을 보여 주려고 그리고 두 가지가 곧 나올 것으로 기대합니다

괜찮아 나는 안드로이드 KTX에 대해 이야기하기 위해왔다 그러나 Kotlin 확장 기능은 없습니다 Android 관련 정보 우리가하고있는 일은 건물 확장입니다

이 도서관을 좀 더 Kotlin에게 친숙하게 만들기 위해 그리고 그것은 모든 도서관이 할 수있는 것입니다 그래서 저는 그 방법들에 대해서 이야기하고 싶습니다 우리는 도서관을 어떻게 더 많이 만들 수 있을지에 대해 생각합니다 Android 라이브러리 모두에 적용되는 Kotlin에 친숙하고, 당신이 쓰고있는 도서관에도 적용됩니다

또는 당신이 사용하고있을 수도 있습니다 도서관을 만드는 첫 번째 방법은 실제로 Kotlin-friendly입니다 Kotlin에서 모든 것을 다시 쓰는 것입니다 분명히 이것은 모든 도서관에서 가능하지 않다 그러나 그것은 확실히 어떤 사람들에게는 선택 사항입니다

앱 전용 비공개 라이브러리 인 경우 귀하의 저장소에 있거나 귀하의 회사 내부에 있습니다 이미 Kotlin을 사용하고 있습니다이 옵션은 실행 가능합니다 그것은, 말하자면 완전히 실용적 인 것처럼 보이지 않습니다 안드로이드 프레임 워크

그리고 나는 우리가 무대에 있다는 것을 확신하지 못한다 안드로이드 X 라이브러리가이를 수행 할 수 있습니다 아마 미래의 안드로이드 X 라이브러리가 Kotlin에 쓰여질 수 있습니다 그럴 가능성이 높습니다 대부분의 것들로 우리가 선택한 것은 무엇입니까? 우리가 출판하는 것은 형제 유물이다

그래서 메인 도서관은 쓰여지고있다 Java 언어를 사용합니다 그리고 우리는 형제 유물로 Kotlin 언어 기능을 제공합니다 이것에 대해 대단한 점은 당신이하지 않는다는 것입니다 소비자에게 Kotlin 표준 라이브러리 강제 적용 그들이 명시 적으로 그것을 원하지 않는 한

확장 프로그램을 관리 할 수 ​​있습니다 API를 보강하는 데 필요한 것이 정확히 무엇인지, Kotlin 특정 기능을 사용할 수 있습니다 이것에 대해 정말 멋진 점은 확장하려는 라이브러리를 제어 할 필요가 없습니다 그래서 도서관을 이용하고 있다면 당신은 그것의 일부를 더 만들고 싶습니다 Kotlin-friendly, 당신은 그것을 할 수 있습니다

자신의 앱에서 또는 라이브러리에 대한 확장 집합을 게시 할 수 있습니다 다른 누군가가 발행하는 그러나 이들이 유일한 두 가지 옵션입니까? 나는 뭔가를보고 싶다 나는 제 3의 약간 잡종의 옵션으로 이끌 것이다라고 생각한다 그리고이 간단한 별칭 확장으로 돌아갑니다 우리는 자바 언어로 정의 된 정적 메서드를 사용했다 Kotlin 언어로 확장 메소드로 바꿨습니다

Java 측에서이 클래스의 구현을 살펴보면, 첫 줄을 포함 시켰습니다 왜냐하면 우리는 즉시 역 참조하는 것을 볼 수있다 우리가 전달하는 논쟁 문자열을 전달하자마자, 최대 문자 수는 얼마입니까? 내가 반복 할 수있는 순서대로 숫자가 있는지 여부를 확인하려면? 따라서 Java API로 Kotlin을 사용한다면, 이 매개 변수가 다음과 같은 것을 알 수 있습니다 플랫폼 유형이라고 불리는 것으로 노출 될 것입니다

null 허용 여부를 알 수 없습니다 그러나 구현을 통해 우리는이 사실을 즉시 알 수 있습니다 메서드는 null 값을 받아 들일 수 없습니다 우리가이 문제를 해결할 수있는 방법 null이 아닌 주석을 추가하는 것입니다 따라서이 주석은 Kotlin 컴파일러에게 알려주는 것입니다

거기에는 제한이있다 특수한 행동이 있다는 것을 계정을 고려해야합니다 아무도 통과하지 못하도록해야합니다 null 가능성이있는 값, 또는 null를이 메소드에 추가합니다 그래서 이것은 Kotlin의 언어 기능을 가능하게합니다

Java에는 단순히 존재하지 않습니다 이제이 시행을 허용 할 도구를 사용할 수 있습니다 Java에서 작동합니다 그러나 언어 자체가 본질적인 것은 아닙니다 그래서 우리가 무효를 위해서 그런 것을 할 수 있다면 – 이 주석을 nullness에 추가 할 수 있으면 Kotlin 컴파일러에게 필요한 것을 알리기 위해 이 메소드를 호출 할 때 동작을 변경하려면, 우리가 다른 것을 위해 이것을 할 수 있습니까? 말하자면,이 정적 메서드를 사용하려면 첫 번째 인수 정말 수신기입니다

그리고 이것이 실제로 확장 기능이 될 때 Kotlin에서 호출? 그리고 이것이 우리로 하여금 잠재적으로, 이것을 명시 적으로 정의 할 필요성을 제거합니다 확장 이 확장은 호출 규칙을 변경하기 위해서만 존재하며, 컴파일러에게 우리가 당신이 그것을 호출하도록 허용하고 싶다는 것을 알리기 위해 다른 방법으로 그리고 지금은, 우리는 이것 만 남았습니다 Kotlin 컴파일러는 주석, 마치 null이 아닌 주석을 본 것처럼, 그것으로부터 무언가를 유추하고 너는 그걸 더 많이 말하는거야

그 언어에 관용적 인 바이트 코드에서, 우리는 그렇지 않으면 쓰려고했던 것을 얻는다 우리는 여전히 static 메소드를 호출합니다 수신기가 첫 번째 인수가됩니다 이 예제는 어떻습니까? 당신이 알아챈 한 가지는 이 확장의 이름은 setPadding이 아니라 updatePadding입니다

이제이 확장을 setPadding이라고 부를 수 있습니다 그러나 문제는 그것이 단지 인수의 하위 집합에 대한 작업 그래서이 경우, 우리는 단지 어디에 왼쪽 및 오른쪽 값을 전달하면 setPadding을 호출 할 수 있습니다 그리고 그것은 잘 작동합니다 그러나 우리가 왼쪽에서 오른쪽으로, 그리고 나서 맨 아래에서 통과한다면, 우리는 네 가지 주장을 제시 할 것입니다

그리고 Kotlin 컴파일러는 실제 패딩 패딩은 네 개의 인수를 받아들입니다 그리고 그것은 진짜 것을 부르는 것을 선호 할 것입니다 그리고 실제 매개 변수에는 명명 된 매개 변수가 없습니다 컴파일 오류가 발생합니다 그것이 바로이 updatePadding의 이름입니다

우리가 진짜 setpadding을 보면 – 4 개의 정수를 취하는 간단한 방법 – 우리가 Kotlin 컴파일러에게 알릴 수 있다면 어떨까요? 이 매개 변수에는 그와 관련된 이름이 있습니까? 자, 매개 변수 이름에서 이것을 추측하는 것이 좋을 것입니다 중복을 지정하지 않아도됩니다 하지만 나는 그것을 주장한다 주석에있는 이들 이름에 대해 명시 적으로 잘 설명합니다 Java 8 바이트 코드에서 실제로 매개 변수 이름을 유지할 수있는 방법입니다

그래서 Kotlin 컴파일러는 이론적으로 그것들을 사용할 수 있습니다 그러나 한 가지 문제는 모든 것이 든 없든 이 행동을 선택해야합니다 갑자기 모든 매개 변수 이름 귀하의 도서관을 가로 질러 돌로 설정되어 있습니다 반면 특수 효과를 사용하면 점진적으로 마이그레이션 할 수있는 기능 따라서 이것은 명명 부분을 해결할 잠재력을 가지고 있습니다

지금, 우리는 Kotlin에서 진짜 방법을 부를 수 있습니다 우리가 원하는 순서대로 4 개의 인수를 지정하면, 우리가 제공하는 이름을 기반으로합니다 기본 값은 어떻습니까? 코 틀린 표정을 지정할 수 있다면 어떨까요? 컴파일러는 컴파일러가 하나는 당신이 공급하지 않았습니까? 이렇게하면 원래의 확장 호출 규칙이 변경됩니다 확장 기능을 호출하는 것에서 실제로 사용하는 것까지 진짜 방법 그런 다음 바이트 코드에서 우리는 우리가 시작한 것, 우리의 명백한 확장 인라인 할 것이다

하지만 지금은 확장이 존재하지 않아도됩니다 특수 효과 형식으로 추가 한 메타 데이터 Kotlin 컴파일러에게 우리에게 우리의 전화 능력을 향상시키고 자했다 이 기능은 코 틀린 특정 방식으로, Kotlin 기능을 활용합니다 그래서 우리는 그렇게 할 수 있습니다 그래서 Kotlin은 KEEP이라고하는이 과정을 가지고 있습니다

Kotlin 진화 및 향상 프로세스입니다 오늘 아침 우리는 이러한 주석을 제안했습니다 KEEP-110으로 이것이 우리가 제안하는 것입니다 Kotlin 컴파일러에 추가하여 이러한 주석을 이해하십시오 우리는 ExtensionFunction과 ExtensionProperty를 가지고 있습니다

정적 메소드 용; 기본값, 매개 변수에 대한 공급 및 기본값을 허용합니다 KtName을 사용하면 메소드, 필드 또는 매개 변수의 대체 이름을 제공합니다 이제는 매우 빠릅니다 이러한 이름은 변경 될 수 있습니다 의미가 변경 될 수 있습니다

이것은 실제로 받아 들여지지 않을 수도 있습니다 Kotlin 컴파일러에 넣습니다 우리는 JetBrains 팀과 협력 해 왔습니다 이것에 대해 꽤 오랫동안 그리고이 중 일부는 이미 프로토 타입 화되어 있습니다

Kotlin 컴파일러 내부 우리는 이것이 이것이 우리가 향상시킬 수있는 방법이라고 생각합니다 Kotlin 발신자 용 Android 프레임 워크, 실제로 Android를 다시 작성하지 않고도 프레임 워크, 또는 적어도 API, Kotlin에서 실행할 수 있는 그리고 이것이 중요한 선택 임에도 불구하고, 실제로 그것을 Kotlin 컴파일러로 만든다고 가정합니다 모든 문제를 완전히 해결하지는 못한다

기존 확장이 해결되고 있음을 KEEP-110에서 제안한 이러한 주석을 결정했습니다 수많은 오픈 소스 라이브러리를 살펴보고, 우리 자신의 도서관을보고, 우리가 가장 유용한 확장이라고 생각했던 것을 보았습니다 자바 메소드의 패턴이 원하는대로 확장으로 변환 될 수 있습니다 그리고 후자의 두 가지는 실제로 보완 적입니다 특수 효과의 큰 장점 당신이 진리의 유일한 원천을 유지한다는 것입니다

당신은 정말로 Kotlin을 알 필요가 없습니다 빌드 시스템에 Kotlin 컴파일러를 추가 할 필요가 없습니다 형제 유물을 게시 할 필요가 없습니다 순수한 자바 라이브러리 일지라도, 이러한 특수 효과를 추가하고 API를 향상시킬 수 있으므로 Kotlin 호출자는 더 관용적 인 구문을 사용합니다 괜찮아

요약하자면, Core-KTX는 이제 Android Jetpack의 일부입니다 Android Jetpack과 함께 출시 된 Android Jetpack으로 버전이 지정되었습니다 화면에 표시되는 것처럼 몇 가지 새로운 아티팩트가 있습니다 확실히 더 많은 것이 있습니다 우리가 생각하는 주목할만한 것들 조각 및보기 모델입니다

그래서 나는 유물을보고 놀랄 것입니다 앞으로 몇 개월 안에 Kotlin 버전을 확인하십시오 참조 문서의 이것은 매우 빠릅니다 이것은 [? 도카?] 우리가 어떻게 문서를 생산하는지 그래서 우리는 단지 거기에 나가서 당신을 미리보기로 보여주고 싶었습니다

이것은 분명히 적극적으로 노력하고 있습니다 Android 버그에 새로운 구성 요소가 있습니다 안드로이드 KTX에 대한 추적기 Core-KTX와 모든 KTX 라이브러리 진실의 원천 인 제트 팩의 일부가되었습니다 Android 지원 리포지토리로 이동했습니다

GitHub 문제를 GitHub로 마이그레이션 할 것입니다 앞으로 몇 주 안에이 버그 트래커에 프로젝트를 맡기십시오 하지만 우리는 여전히 GitHub 레포에 대한 요청을 받아 들일 것입니다 GitHub 저장소로 다시 동기화합니다 문제가 더 이상 나타나지 않을 것입니다

GitHub에서 진실의 근원 Android 버그 추적기에 표시됩니다 [? KEEP?]이 제안되었습니다 한 시간 전에 풀 요청을 만들었습니다 가서 확인해 봐

이 문서에는 예제에 대해 더 자세히 설명되어 있습니다 그리고 내가 말했듯이, 선택된 주석 우리가 가장 큰 영향을 줄 것이라고 생각하는 것들이었습니다 그러나 문서의 맨 아래에, 당신은 그것을 볼 것입니다, 만약 이와 같은 것이 받아 들여지면, 미래의 더 많은 향상을위한 잠재력이 있습니다 그 링크가 이것이어야합니다 어제 밤 제가 제출하기 전에이 링크를 만들었어요

잘하면, 정확합니다 그리고 그게 다야 고맙습니다 [박수 갈채] [음악 재생]

Kotlin Android S1E6 : GridView – Sort Ascending and Descending

ProgrammingWizards TV에 오신 것을 환영합니다 이것은 Kotlin 안드로이드 GridView 데이터 데이터 정렬 자습서입니다

우리는 GridView를 오름차순과 내림차순으로 정렬하는 방법을 살펴볼 것입니다 토글 정렬 버튼을 클릭하고 먼저 그리드 뷰를 오름차순으로 정렬합니다 다시 클릭하면 내림차순으로 정렬됩니다 오름차순은 A에서 Z까지 내림차순으로 정렬하는 것은 그 반대입니다 우리가 사용하는 프로그래밍 언어는 Kotlin이고 프레임 워크는 Android입니다

먼저 우리는 안드로이드 스튜디오를 사용하여 프로젝트를 만듭니다 응용 프로그램 이름을 입력하고 Kotlin을 포함했는지 확인하십시오 지원은 Kotlin이이 수업에서 사용하는 프로그래밍 언어이기 때문에 지원됩니다 Kotlin 지원을 포함하여 android studio가 Kotlin Plugin을 종속성으로 추가하고 해당 플러그인을 앱 수준 buildgradle에서 바로 적용하십시오

따라서 Kotlin 지원을 포함 시키십시오 옵션이 표시되지 않으면 나중에 Android Studio를 업데이트해야합니다 버전 그런 다음 API 레벨 14를 미니멈 SDK로 선택합니다 그런 다음 템플릿 활동으로 빈 활동을 선택합니다

그런 다음 프로젝트를 생성하기 위해 클릭 마침을 클릭하십시오 먼저 우리의 앱 레벨 buildgradle을 점검하여 android studio가 Kotlin Android Plugin을 추가했는지 확인하십시오 우리는 또한 지원 라이브러리 appcompat가 추가되었습니다 우리는 프로그래밍 언어로 Kotlin Android를 사용하고 있습니다

Kotlin은 약 5 년 동안 개발 된 정적 유형의 프로그래밍 언어입니다 Jetbrains JVM (Java Virtual Machine)에서 실행되는 바이트 코드로 컴파일됩니다 그런 다음 우리는 activity_mainxml을 보게됩니다

이 활동은 우리의 주요 활동으로 확대 될 것입니다 GridView를 어댑터 뷰로 추가합니다 그런 다음 버튼을 클릭하면 오름차순과 내림차순 정렬이 토글됩니다 TextView를 헤더 레이블로 사용합니다 이 모든 것들은 RelativeLayout 엘리먼트로 둘러 쌉니다

' 여기에서 우리의 레이아웃을 디자인보기에서 볼 수 있습니다 기본적으로 상단에 TextView 헤더, 그 아래에 GridView, 상단에 정렬 버튼이 있습니다 그 다음 우리는 MainActivitykt에옵니다 이것은 우리가 Kotlin 코드를 작성하는 곳입니다

먼저 패키지 이름을 지정합니다 kotlin에서 java와 마찬가지로 코드는 패키지로 구성됩니다 그런 다음 MainActivity라는 Kotlin 클래스를 만듭니다 kotlin에서는 java와 마찬가지로`class` 키워드를 사용하여 클래스를 만듭니다 이 클래스는 Activity에서 파생시킬 것입니다

액티비티는 androidapp 패키지에있는 클래스이므로 가져 오기를 지정합니다 Kotlin에서`import` 키워드를 사용하여 패키지와 클래스를 가져 오는 것을 볼 수 있습니다 Kotlin은 객체 지향 프로그래밍을 완벽하게 지원하므로 여기에서 볼 수 있듯이 상속을 사용할 수 있습니다 android

appActivity에서 파생됩니다 이것은 우리의 클래스를 안드로이드 구성 요소 인 액티비티로 바꿀 것입니다 따라서 Android에 등록해야합니다 manifest

xml 우리에게는 하나의 활동 만 있고 우리의 실행기 활동입니다 그래서 우리는 코 틀린 반으로 돌아옵니다 먼저 속성 인 클래스 속성을 만듭니다 첫 번째 속성은 GridView 유형의 gv입니다

lateinit 수정자는 null이 아니므로 사용합니다 만들어진 이 GridView는 우리의 adapterview입니다 그런 다음 우리는이 경우 두 번째 위젯에 간단한 버튼을 사용합니다 클릭하면 오름차순과 내림차순 사이를 전환 할 것입니다

그런 다음 데이터 소스 역할을하는 데이터 구조 인 배열을 만듭니다 우리는 GridView에서 은하를 렌더링 할 것입니다 우리는 arrayOf () 함수를 사용하여 Kotlin에 배열을 생성합니다 그런 다음 배열에 데이터를 채 웁니다 기본적으로 괄호 안에 쉼표로 구분 된 문자열을 제공합니다

다음으로 Arrays 클래스의 asList () 메서드를 호출하여 배열을 arraylist로 변환합니다 Collections 클래스의 sort () 메서드를 사용하여 데이터를 정렬하므로이 작업을 수행합니다 sort ()는 배열이 아닌 목록에 적용되는 정적 메서드이므로 배열을 목록으로 변환하는 이유입니다 그런 다음 오름차순 변수를 true로 설정합니다 버튼을 클릭 할 때 true와 false 사이에서이 변수를 토글합니다

기본적으로 이전 상태를 무효화합니다 기본적으로 데이터는 정렬되지 않습니다 그런 다음 실제로 데이터를 정렬 할 sortData ()라는 메서드를 만듭니다 먼저 sortAscending 부울 값을 확인합니다 true의 경우, Collections 클래스의 sort () 메소드를 호출 해 galaxiesList를 건네줍니다

그러면 기본적으로 오름차순으로 데이터가 정렬됩니다 그렇지 않으면 이미 정렬 된 데이터를 내림차순으로 바꿉니다 ' 그런 다음 sortAscending의 값을 무효화합니다 오름차순이면 내림차순으로, 그렇지 않으면 반대로 토글됩니다 그런 다음 ArrayAdapter를 인스턴스화하고 인스턴스를 GridView의 속성으로 설정합니다

그러면 GridView에 데이터가 바인딩됩니다 그런 다음 itemClickListener를 처리합니다 왼쪽에 입력을 제공하는 람다 식을 사용합니다 오른쪽으로 가면 실행될 함수를 gridview 항목을 클릭합니다 이 경우 단순히 토스트 메시지 대화 상자를 보여줍니다

선택된 격자보기 항목을 Toast 메시지로 보여줍니다 그런 다음 위젯을 초기화하는 메소드를 만들 것입니다 먼저 findViewById () 메서드를 사용하여 GridView의 id를 전달합니다 그런 다음 어댑터를 gridview의 특성으로 설정하십시오 이렇게하면 정렬되지 않은 데이터가 gridview에 바인딩됩니다

정렬은 버튼을 클릭 할 때만 발생합니다 그런 다음 버튼을 참조하십시오 정렬 버튼의 onClick 이벤트를 수신합니다 클릭하면 우리는 단순히 sortData () 메소드를 호출하여 그리드 뷰 데이터를 정렬합니다 다시 클릭하면 오름차순과 내림차순 간을 전환 할 수 있습니다

우리는 마지막으로 MainActivitty의 onCreate () 함수를 오버라이드합니다 먼저 우리는 activity 클래스의 setContentView () 메소드를 호출한다 그런 다음 initializeGridView () 메서드를 호출합니다 그리고 그게 다야 이제 응용 프로그램을 실행합니다

응용 프로그램을 실행할 때 기본적으로 정렬되지 않은 gridview가 있습니다 그런 다음 A – Z의 알파벳순으로 오름차순으로 데이터를 정렬하는 토글 정렬 방법을 클릭합니다 단일 gridview 항목을 클릭하면 클릭 한 항목이 표시되어 토스트 메시지에 표시됩니다 그래서 그게 다야 이것은 Kotlin Android에서 gridview 정렬 자습서되었습니다

알파벳 순으로 데이터를 정렬하는 예를 살펴 보았습니다 오름차순 및 내림차순으로 저희 웹 사이트 http://camposhainfo에서 동영상과 같이 구독하고 소스 코드를 확인하십시오 그렇지 않으면 조심하고 다음 수업에서 내가 너를 잡을거야

Android Jetpack: KTX – Sweeter Kotlin Android Development

[ROCKET ROARING] FLORINA MUNTENESCU : 올해 초, 우리는 안드로이드 KTX의 미리보기 – Android 프레임 워크에 대한 일련의 확장 Kotlin과 함께 개발하는 것을 목표로했습니다 명확하고, 쾌적하고, 관용적이다

그 이후로 우리는 여러 버전을 출시했습니다 지역 사회의 기부금도 포함됩니다 이름을 core-ktx로 변경했습니다 이제 10 알파 버전을 출시 할 예정입니다

제트 팩의 일부로 안드로이드 가속화를 목표로 한 우리 도서관 세트 개발 core-ktx 라이브러리에는 확장이 포함되어 있습니다 프레임 워크의 특징과 기능에 대해 설명합니다 하지만 우리는 다른 Android Jetpack을 잊지 않았습니다 도서관 – 오래되었거나 새로운 것

조각 관리자와 같은 Android X의 수업, 컬렉션, 실시간 데이터 반응 형 스트림 및 새로운 탐색 구성 요소가 KTX 아티팩트와 관련되어 있음 언어의 기능을 활용하여, 확장 기능 및 속성, lambdas, named 및 기본 매개 변수 이제 몇 가지 예를 살펴 보도록하겠습니다 KTX가 없으면 단편 트랜잭션 수행 트랜잭션을 시작하고 조치를 트리거해야합니다 단편 추가 또는 교체, 네 가지 커밋 방법 중 하나를 결정합니다 커밋을 예약할지 또는 호출할지 여부에 따라 동 기적으로 상태 손실을 허용하거나 허용하지 않습니다

fragment-ktx는 트랜잭션 확장 함수를 추가합니다 FragmentManager 클래스에 모든 트랜잭션 시작 및 상용구 커밋, 동기화 및 상태 손실에 대한 기본값 제공 쉽게 덮어 쓸 수 있습니다 건배를 표시 할 때 전화 쇼를 잊지 않으려면, 코드를 단순화하려면 컨텍스트 확장을 사용하십시오 core-ktx의 기능 Spans API로 작업 하시겠습니까? 주요 클래스에 확장 기능을 추가했습니다

span 문자열, spannable 문자열 및 spannable 문자열 작성기 – API를 사용하기 쉽고 관용적으로 만들 수 있습니다 그래서 예를 들어, 문자열에서 spannable 만들기, 텍스트를 굵게 표시하고 빨간색으로 만 표시 이렇게 쉽게 할 수 있습니다 메뉴 항목을 각각 만들 수 있습니다 – 동작 수행 메뉴의 각 항목에서 특정 항목이 또는 항목을 쉽게 제거 할 수 있습니다 Android X 지원 SQLite 데이터베이스를 사용할 때 데이터베이스 트랜잭션 구현, 당신은 많은 상용구가 필요합니다 sqlite-ktx를 사용하면 중요한 것에 집중할 수 있습니다

데이터베이스에서 수행하려는 조작 그런 다음 거래 방법을 보겠습니다 나머지는 처리하십시오 Android Jetpack의 새로운 탐색 구성 요소 이미 도메인 관련 언어를 제공하고 있습니다 예를 들어 코드를 설정하려면 탐색 동작이있는 탐색 그래프 뒤로 버튼을 10 번 누르지 않아도됩니다

과거의 모든 결과를 통해 애니메이션이 있습니다 들어가고 나가기 위해, 당신은 무언가를 쓸 것입니다 이렇게 시작 목적지를 기준으로 그래프를 작성하고, 대상 ID가있는 검색 작업을 추가하십시오 및 탐색 옵션

탐색 옵션에서 검색 조각을 설정합니다 진입 및 종료 애니메이션이있는 SingleTop으로 시작됩니다 그래서 핵심 단편 탐색과 다른 것들 – 이 모든 것들은보다 깨끗하고 단순하며, Kotlin과 함께 더욱 관용적 인 Android 개발 그리고 여기서 멈추지 않을 것입니다 더 많은 뉴스를 원하시면 GitHub, YouTube 및 Twitter에서 팔로우하십시오

[ROCKET ROARING]

Android Kotlin Tutorial: Using Datatypes And Inputting Data into Variables

얘들 아 안드로이드 코딩 튜토리얼에 오신 걸 환영합니다 마지막으로 변수를 사용하여 주 변수에 추가하는 방법에 대해 배웠습니다

함수는 이제 마지막 비디오에 다음과 같은 반환 코드가 있습니다 우리는 이제 집계와 함께 실행중인 변수를 추가했습니다 하나 귀하의 변수는 번호 하나가 수정되어 있으므로 읽기 전용 액세스 권한이있는 벽으로 전환 할 수 있습니다 다시 와우로 전환 물론 물론 지금이 비디오에서 이것은 단지 이 비디오의 또 다른 부분은 다음과 함께 데이터 유형을 사용하는 방법을 보여 드리겠습니다 벽 변수는 악의적 인 변수가 될 것입니다

hello와 동일하므로 지금 hello라는 이름의 변수를 만들었습니다 내가 원하는 것은이 변수가 오직 문자열 타입을 취하기를 원한다는 것이다 내가 23로 바꾸면 여전히 작동하지만 나는 그것을 원하지 않는다 작업자 문자열 데이터 만이 문자열에 삽입되기를 원합니다 이제 안녕하세요

변수가 특정 데이터 유형과 연관되어 있는지 확인하십시오 그냥 추가하고 싶습니다 변수 이름 바로 뒤에 콜론을 넣고 데이터 유형을 추가하고 싶습니다 내 경우에 문자열 인이 변수와 연관시키고 자한다 그래서 이제는 문자 인 문자열 만 가져올 수 있습니다

또는 단순히 말할 수 있습니다 현재 영어 영문자를 입력하고 숫자를 추가하면됩니다 정수형 그것은이 정수가 정수 변수가 아니라고 말합니다 이 변수는 문자열 유형과 연결되어 있으므로 삽입 만 할 수 있습니다 그것으로 문자열 그래서 만약 내가 다시 인사로 돌아 가면 그것은 지금 완벽하게 작동했습니다

너에게 우리가 왜 그것을 사용해야하는지 문자열의 사용은 무엇인가? 당신은 단지 그것을 그냥두면 자동으로 데이터 타입을 선택할 것입니다 우리가이 변수에 대한 값으로 부여한 변수는 이제 고려됩니다 여기에 콜론 문자열을 추가하지 않았더라도 문자열로 처리합니다 콜론 문자열을 사용하는 방법은 지금 내가 새 문자열에서 보여주기 때문에 line이 줄에서 너무 빨리 갈 예정입니다 변수를 만들었습니다

이 변수에 대한 문자열로 유형을 연결합니다 이 변수는 현재 초기화되었지만 유용하지는 않습니다 내 변수에서이 변수에 값을주고 싶으면 사용하십시오 값은 사보트입니다 죄송합니다

이제이 변수는 두 번째 줄 첫 번째 줄에는 값이 없습니다 단지 여기에 연관되어 있습니다 20 파일로 전환하고 지금은 멈추거나 나에게 행을 보여주고 싶다 정수 타입이 아니라 문자열이기 때문에 이제는 sabado로 바꾼다 그것은 완벽하게 작동합니다

그래서 우리가 실제로 어떻게해야하는지에 대한 예를 들어 보겠습니다 이 것을 사용하여 데이터 유형을 추가하면 인쇄 노드를 만들뿐입니다 그래서 Ln을 인쇄하면 새로운 줄에 메시지를 출력 할 줄을 출력 할 것이다 이렇게하면 문자열 데이터를 가져올 것이므로 이름을 전달하고 싶습니다 이 변수에 데이터를 넣었으므로 원하는 변수를 이미 지정했습니다

이름을 이렇게 바꿀 수있게 내 이름으로 바꿔 이제는 자유롭게 놔둬 내가 원해 사용자로부터 데이터를 가져 와서이 변수에 연결할 수 있습니다 다른 인쇄 노드에 표시하여 사용자로부터 데이터를 얻으십시오 단순히 빨간 선인 단일 선을 이렇게 추가해야합니다

그게 정말 독자가 진짜로 읽을 수있을 것입니다 그래서 이런 일이 일어 났을 때 이벤트가 애플리케이션을 실행할 때 언제 응용 프로그램을 실행할 것인가? 대신 프로그램이 단계별로 단계별로 작동한다는 것을 알고 있습니다 단계 예, 그렇습니다 이렇게하면 첫 번째 줄을 호출 한 다음 두 번째 줄과 세 번째 줄은 단지 당신의 이름을 입력하면됩니다 그 후 지금이 변수를 데이터 형의 문자열로 초기화 할 것입니다

사용자가 작성한 데이터를 가져와서 콜론 공간 이제 네, 같은 줄에 값을 입력하면됩니다 새로운 줄을 제거하려고한다 이제 변수를 어떻게 초기화했는지 알 수 있습니다 빨간색 줄이 있으면 빨간색 줄 Mattel을 사용하여 값을 가져옵니다 주요 기능 내부에서 사용할 수있는 일부 에어로빅이 필요하다는 표시 지금 전화는 교육입니다

우리가 초기화하는 동안 우리가 그냥 물음표를 추가해야만하는 변수입니다 문자열을 묶는 법안에 아무 값도 없다 그래서 지금 이것을 잘 초기화해야한다 변수이 줄은 값이 없으므로이 것을 추가해야합니다 코드는 거기에 있고이 물건은 이제 두 번째로 물음표라고 부릅니다

우리가 말하는 라인은 그것이 라인을 읽는 라인을 얻는 것입니다 라인 정말 우리가 무엇을 듣고 무슨 일이 일어날 것인가? 마지막으로 우리는 메시지 인쇄 줄과 println을 인쇄해야합니다 그것은 새로운 라인에서 인쇄 될 것이므로 그것을 인쇄해야 할 것입니다 내 이름을 출력해야합니다 그래서 변수 이름입니다

그래서 시도해 보겠습니다 그냥 갈거야 그래서 건물은 약간의 시간이 걸릴 것입니다 오케이 마무리 그래서 당신의 이름을 입력하십시오 나는 안식일 pkc 아멘을 입력하려고합니다 그리고 Enter를 누르면 M & R이 무엇 때문에 그것이 인쇄물 인 첫 번째 줄부터 시작 했으므로 귀하의 이름을 입력하고 이제는 변수를 이름을 내 이름으로 지정하면 데이터가 문자열 유형이 될 것입니다

redline이라는 메소드를 사용하여이 변수에 문자열을 입력하십시오 여기 그리고 마침내 우리는 단지 데이터를 인쇄 했으므로 여러분에게 보여 드릴 것입니다 디버그 모드 그래서 여기에 여기에 중단 점을 추가하려면 여기에 지금 이것을 추가하십시오 원은 디버그 될 것이라는 것을 나타내며 우리는 앱을 실행할 때 일어나는 일에 대해 알기 때문에 마우스 오른쪽 버튼을 클릭 한 다음 디버그를 선택해야합니다 이제 디버그 모드를 볼 수 있습니다

처음에는이 주요 함수 인 args가 이제는 호출됩니다 두 번째 줄에이 시점에서 도트 점 또는 중단 점을 추가했습니다 지금 가자 그러면 이걸로 스트립을 알 수있다 T는 클릭만으로 들어간다

그게 지금은 말하고 거기에 당신의 이름을 입력한다 네 이름으로 그렇게 말하면 두 번째 줄로 간다 첫 번째로 첫 번째로 두 번째 줄의 세 번째 줄에 들어가서 enter를 말합니다 당신의 이름과 우리는 여기서 가치를 부여 할 것입니다 괜찮습니까? 그렇게하지 않으면 어떤 종류의 것이 아니므로 다시 시도하십시오

여기서 디버그를 인쇄하고 싶습니다이 단계가 목표가 될 것입니다 그것이 우리가 달리고 있는지, 아니면 달려 있는지에 대해 확실히 알 필요가 없다는 것을 짐작할 수 있습니다 디버깅 또는 그 밖의 어떤 작업이 이제는이 라인에 있고 지금은 처음에는 변수로, 데이터가이 시점에서 여기에있을 것입니다 그냥 내려 가서 그냥 끝내면 기본적으로 할 수있는 건 없어요

이 디버그 모드에서 볼 수 있으므로 다음 파트로 넘어 가서 디버그 할 수 있습니다 모드는 라인에서 라인이 무엇을하는지 이해하는 데 도움이됩니다 이 프로그램은 예제이거나 기본 프로그램이므로 디버그 모드에서 표시 할 항목이 없으므로 미래는 이제 그냥 선택을 취소하십시오 나이 당신은 무엇을합니까? 단순히이 기차를 int로 바꾸면 시작됩니다 정수 타입이 필요하고 문자열을 찾았으므로 에러가 발생했습니다

기본적으로 레드 라인은 문자열 데이터를 가져올 것이고 가져 가지 않을 것입니다 모든 종류의 정수 또는 다른 제목 또는 모든 유형의 데이터 데이터 유형 사용자 입력을 문자열로 읽으려는 경우 문자열이 아닌이 영역에서 여기처럼 단순히이 문자열 유형을 정수로 변환해야만 할 수 있습니다 끝으로 입력하기 만하면 문자열이 변환됩니다 타입을 입력하면 여기에 표시되므로 지금 당신은 조금 문제가있어서 데이터가 지금 우리가 가지고 있지 않은지 확인해야합니다 단순히 이중 느낌표를 추가 한 다음 소켓에서 온 것입니다

그래서 시도해보십시오 앱을 실행해라 나는 항상 프로그램 대신 앱을 말하는 것이 중요하지 않다 당신의 이름 아래서 69 69가 프린터라고 말하자 이것은 우리가 입력하는 것과 똑같은 것이며 변수에 주어진다

빨간색 선을 사용하여이 동영상을 즐기세요 이 비디오에 대해 이해했으면 좋겠다 질문 또는 어떤 종류의 당신은이 비디오를 보면서 예 의심을 알고 있습니다 평화를 보아 주셔서 감사합니다

Android Tutorials with Kotlin || Introduction to Android App Development #1

기술적 인 Babaji 채널을 구독하고 벨 아이콘을 눌러 최신 버전을 다운로드하십시오 비디오 업데이트 안녕 친구 야 나야 타 리크 아크 타르 안사리 이건 안드로이드의 첫 비디오 야

코 틀린 (kotlin)과 함께하는 자습서는 여기에서 제가 가르치게 될 내용을 넣었습니다 당신은 비디오의 커플에서 당신이 안드로이드 자습서에 관한 20 ~ 30 비디오를 업로드합니다 내가 여기서 쓴 모든 것을 Android에서 그렇게 가르쳐 줄 것입니다 구성 요소 부분 나는 당신에게 활동 의도의 서비스 방송을 가르쳐 줄 것입니다 수신기 및 콘텐츠 제공 업체를 배우고 난 후에 당신에게 고급 부분의 고급 부분 나는 당신이 그들에게 어떻게 접근 할 수 있는지를 보여줄 것입니다 이제 REST API 및 웹 서비스를 호출 할 수 있으며이를 통해 작업 할 수 있으며 Google지도 장소 및 firebase와 함께 작업 할 수 있으며 Firebase는 Google이 가장 중요한 부분입니다

거기에 메시지를 보내고 메시지를 검색하고 인증을받는 방법 사용자와 Google Cloud 메시징 푸시 알림 및 실제로 무엇이 있는지 이것들이 내가 비디오 두어에서 당신에게 가르쳐 줄 것입니다 그래서 활동에 대해 당신에게 말해 보도록하겠습니다 활동이란 무엇입니까? 윈도우 또는 프레임과 같은 사용자 인터페이스가있는 단일 화면을 나타냅니다 Java를 사용하는 것과 같은 응용 프로그램이있는 경우 Java에 대해 알고 있다면 Java jframe에 대해 알고있는 패키지를 흔들어서 Android에서의 해당 활동을 좋아하세요 우리가 필요로하는 활동을 디자인하십시오 XML은 또 하나의 파일입니다 Kotlin in Kotlin 개발 좋아요

그래서 또한 코드를 적게 쓰는 방법을 보여 드리겠습니다 Kotlin 당신이 안드로이드 개발을위한 자바를 사용한다면 당신은 두 가지를 써야한다 세 페이지의 코드를 사용하여 Kotlin은 한 페이지의 코드를 작성하여 Kotlin은 코드가 정상적으로 작동하도록 다른 활동이 자체 수명주기를 가짐 사용자가 통신 함 액티비티 액티비티를 통해 장치가 화면에 첫 번째로 바란다 화면 또는 그 다음에 무엇이든지간에 사용자가 친구 제이드 림 네, 자바 괜찮아 다음 부분은 의도 의도입니다 활동과 활동 사이의 의사 소통 활동 방송 수신기 나는 또한 당신에게이 서비스를 가르치고 서비스와 비 사용자 상호 작용없이 실행중인 백그라운드 프로세스를 다음과 같은 서비스라고합니다 배경에서 실행되는 라 내가 데모 응용 프로그램을 보여줄 것입니다

이미 완료 했으므로 애플리케이션 서비스를 닫은 후 배경 때 우리는 단어의 응용 프로그램을 닫을 때처럼 여전히 우리는 서비스 서비스로 인해 가능한지 메시지를 받고 있습니다 사용자 상호 작용없이 백그라운드에서 실행하는 것은 사용자없이 수행됩니다 상호 작용 스크립트 다음 구성 요소는 우리가 내가 할 때처럼 방송 수신기입니다 각 애플리케이션 방송 수신기의 데모를 보여줍니다 헤드셋 플러그인을 삽입 할 때 헤드셋 플러그인을 삽입하면 충전기를 꽂을 때 액션 바에 헤드셋 용 기호가 표시됩니다

충전기 Seymour는 충전이 끝났다고 생각하고 통화 할 때 전화가 오면 우리가 전화를받을 때이 모든 전화가 방송에 온다 수신기 콘텐츠 제공자는 연속적인 콘텐츠 제공자는 안드로이드에서 여러 응용 프로그램간에 데이터 공유 보안 기능은 우리가 접촉하는 다른 애플 리케이션 애플 리케이션 데이터입니다 우리의 응용 프로그램이 직접 부드러운 콘텐츠 공급자를 제공하는 경우 우리는 안드로이드 내장 된 다른 응용 프로그램의 데이터에 액세스 할 수 있습니다 연락처와 같은 응용 프로그램 연락처에 액세스 할 수 있습니다 데모 응용 프로그램을 어떻게 개발할 수 있는지 보여줄 것이기 때문에 응용 프로그램의 유형도 괜찮습니다 고급 부분에서는 어떻게하면 네트워크 연결을 학습 한 후 복구하면 모양 응용 프로그램을 만들지 만 데이터베이스 사용과 같은 실시간 응용 프로그램과 Java는 우리가 할 수없는 응용 프로그램을 재 시도 할 수 있으므로 고급 부분에서 가르칩니다 기본적으로 firebase 지원자는 Google에서 Google의 로그인을 클릭 할 수 있습니다

전자 메일 및 암호에서 우리가 웹 서비스로 확인하는 방법 데모 응용 프로그램을 통해 데모 응용 프로그램을 사용하여 주변 장소를 찾을 수있는 방법을 알려 드리겠습니다 Google 지역 정보 REST API 이제 다음 슬라이드에 올라갈 예정이므로 대부분의 사람들은 안드로이드가 운영 체제라고하지만 이것은 사실이 아닙니다 안드로이드는 이것은 100 % 사실이 아닙니다 Android는 모바일 태블릿 TV 기술을위한 플랫폼입니다 착용 할 수있는 기기와 자동차를 보유하고 있으므로 안드로이드 플랫폼은 세 가지로 구성됩니다

안드로이드에서 운영 체제 미들웨어 및 주요 응용 프로그램을 포함합니다 Alina의 커널이 있기 때문에 Linux는 Android 미들웨어의 운영 체제입니다 다음 슬라이드의 주요 응용 프로그램을 보여 드리겠습니다 다른 아키텍처는 여기에서 볼 수 있습니다 Linux 커널은 Androids에 있습니다

그래서 실제로 리눅스 커널의 안드로이드 선형 수정 된 버전에 없습니다 거기에있다 그리고 이것은 중간 웨이브 SQLite 이것들은 무엇이든간에 언어이다 응용 프로그램과 운영 체제 사이의 작은 파도로 알려져 있으므로 괜찮아 실제로이 계층에서 개발 한 애플리케이션 프레임 워크 개발할 수있는 애플리케이션 프레임 워크를 사용하여 애플리케이션을 개발할 것입니다 우리의 행복은 우리가해야하는 청원 관리자와 같이 일하고있는 것과 같습니다 장치 관리자 클래스 및 우리는 그 작업 할 수 있습니다

우리가 할 수있는 것과 같이 이것들은 미들웨어이므로 SQLite로 우리가 어떻게 저장할 수 있는가? 우리는 당신을 보여줄 로컬 장치를 탐지하고 안드로이드에서 우리는 여기서 JVM을 사용하지 않으면 BVM dalvik 가상 머신을 사용합니다 dot APK 파일은 DVM에서 실행됩니다 그래서 이것이 제가 제공 한 개요입니다 나도 당신에게 안드로이드 스튜디오를 보여줍니다 현재 응용 프로그램이 여기에 표시됩니다

개발 II 여기에서 나는 안드로이드 스튜디오의 안드로이드 33 안정 버전을 사용하고 있습니다 미래에 Google에서 온 업데이트가있는 경우 Android가 표시됩니다 최신 안드로이드 쇼 말을 모두 개발하십시오 그래, 우리는 여기에서 이미 내가 가진 새로운 도시 프로젝트를 시작할 수있다

우리가 어떻게 우리가 가져올 수 있고 우리가 우리 프로젝트를 get에 넣을 수 있는지에 대한 비디오를 만들었습니다 저 집 괜찮은 비디오를 볼 것을 권합니다 전체 발달에서 나는 그 2 개의 개념을 사용할 것이기 때문에 당신을 보여주게하십시오 내 동영상을 본 후 어떤 유형의 응용 프로그램을 개발할 수 있습니까? 여기 내 테스트 앱을보고 로컬 전화 데이터에 액세스 할 수 있습니다 이렇게하면 장치 폴더와 파일을 볼 수 있습니다 이러한 유형의 응용 프로그램을 자동 완성하여 어떻게 우리가 이 작업을 수행 할 수도 있으므로 내가 어떻게 가르 칠지이 유형의 화면을 디자인 할 수 있습니다

당신도 알 수 있습니다 그래서이 애플리케이션을 볼 수 있습니다 Google 지역 정보 좋아요 주변 장소를 검색 할 수 있으며 진행률 표시 줄도 볼 수 있습니다 1500 반경 내의 정보 서버는 1

5 킬로미터의 ATM ATM이있는 곳 근처의 식당을 검색 할 수있는 방법을 알려줍니다 응용 프로그램 의이 유형은 또한 당신을 가르쳐 줄 것입니다 이 클래스 화면을 만들 수 있음을 알 수 있습니다이 스크린은 5 후에 스플래시 스크린이라고 불립니다 초 Google에서 로그인 할 수있는 방법 ok 어떻게 이런 종류의 메뉴를 만들 수 있습니다 당신에게 몇 가지를 가르쳐 줄거야 보기 좋아요이 비디오를보고 다음 비디오에서 보게되어서 고맙습니다

IntelliJ|Android development tutorial beginners| Kotlin Android tutorial|Android development Kotlin

코드 허브에 오신 것을 환영합니다! 이것은 Kotlin에 대한 우리의 첫 튜토리얼입니다 그래서

Kotlin은 2011 년에 JetBrains에 의해 소개되었습니다 그것은 자바 가상 머신에서 작동 정적으로 입력 된 프로그래밍 언어입니다 2017 년 안드로이드 스튜디오 출시로 30 Kotlin은 완전히 지원되는 프로그래밍이었습니다

Android 운영체제의 언어 설치를 시작하는 방법을 알아 봅시다 IntelliJ IDEA okay so Google에서 IntelliJ를 입력하고 우리가 얻는 것을 봅니다 이것은 JetBrains의 공식 사이트처럼 보입니다 클릭하십시오 이제 여기에는 두 가지 버전이 있습니다 하나는 궁극적이고 다른 하나는 공동체입니다

지금은 커뮤니티 버전을 다운로드 할 예정이며 이미 다운로드 했으므로 다시 다운로드 할 필요가 없습니다 설치 프로세스는 익숙해야만합니다 이미 다운로드하고 설치 했으므로 클릭하여 볼 수 있습니다 우리는 어둠의 주제를 좋아하기 때문에 나는 검은 색 테마를 선택했다 프로그래머라면 지금 시작하겠습니다

파일을 만들고 새 프로젝트를 클릭하십시오 그리고 우리는이 창을 보게 될 것입니다 JVM은 Java 가상을 의미하는 방식으로 Kotlin JVM을 검사 할 것입니다 컴퓨터를 클릭하고 다음을 클릭하면 지금 필요하지 않은 것처럼 보입니다 그래서 클릭합니다 네, 이제 우리 프로젝트에 이름을 붙일 필요가 있습니다

이것이 Kotlin에 대한 우리의 소개이기 때문에 우리는 Hello Kotlin ahh 타이핑에 타이핑 할 것입니다 나쁜 클릭 마침을하고 이것은 우리가 볼 수있는 첫 번째 프로젝트 Hello Kotlin입니다 여기 도구를 클릭하고 Kotlin을 클릭 한 다음 Kotlin Repl로 이동하십시오 REPL은 읽기를 나타냅니다 평가 print

loop it는 코드없이 한 조각을 실행할 수있는 대화 형 쉘입니다 그래서 전체 애플 리케이션을 실행하는 데 여기에 하단에 나는 그것을 풀어 갈거야 그래서 우리는 여기서 명확하게 볼 수 있습니다 여기에 코드를 입력 할 수있는 곳이 있습니다

나중에 코드를 배우기 때문에 전체 코드를 이해해야합니다! 지금은 그냥 작동하는지 보지 않을 것입니다 그 화면에 안녕하세요 세상을 인쇄 내 코드를 입력하자 따옴표 그리고 지금 함수 이름에 함수 유형을 실행하고 Ctrl + Enter를 누르면 여기에 초록색으로 IntelliJ에 대한 소개 였고 진행 과정에서 Kotlin을 배울 것입니다

Kotlin이 점점 더 많은 튜토리얼을 볼 수 있으므로 구독하는 것을 잊지 마십시오 정말 인기가 구독하는 것을 잊지 마세요 Thankyou