iMessage on Android

안녕 얘들 아, 오스틴이야 때때로, 누군가에게 메시지를 보내고 싶을 수도 있습니다

실제로 응답하게하십시오 안녕하세요 – 안녕하세요 내가 듣기 전에 너는이 문제가 있었어 – 오, 항상이 문제가있어

그래서 많은 사람들처럼 안드로이드에 있습니다 – 예 – 그러나 인구의 나머지에게, 나는 웨스 (Wes) 또는 좋은 남자로 여겨지지 않는다 또는 자신이 선택한 전화를 가진 사람 일 수도 있습니다 – 너는 녹색 거품 소년이야

– 나는 녹색 거품 소년이다 (극적인 음악) 나는 너를위한 장면을 조금 세우겠다 당신이 거기 있다고 상상해보십시오 너는 네가 원하는 데이트 앱에있어 어쩌면 틴더 (Tinder) 나 범블 (Bumble or Jdate), 파머 스 (FarmersOnly) 우리 몰몬교 친구들을위한 상호 교류

그리고 모든 것이 정말 잘되고 있습니다 – 나는 당신이 그 중 하나 하나를 시도했다고 생각합니다 – 사실 (웃음) 그 다음에는 전화 번호를 교환해야 해 지금 보통 대개는 대단한 요점입니다

대화에서, 그러나 이것은 어디에 나는 걱정되기 시작하기 때문에 그들은 내 어두운 진리를 발견하려고합니다 – 녹색 거품 소년 – 난 녹색 거품 소년이야 아주 진짜입니다 이건 말도 안돼

그러나 저는 해결책을 찾아야한다는 것을 알았습니다 그래서 – 내 말은, 해결책이 있다는거야

당신은 applecom/iphone으로 갈 수 있습니다 – 네,하지만 해결책을 찾고 싶었어요 나를 좋아하는 멋진 사람들에게 우리는 매우 이상한시기에 있습니다

분명히, SMS가 텍스트 메시징의 표준 임에도 불구하고, 정말 페이딩입니다 – 너는 세상의 대부분을 가졌어 WeChat 또는 LINE에 있습니다 – 페이스 북의 메신저 – 네, 그리고 메시지

– 사람들은 더 많은 기능을 원하지만, 그들은 더 시원한 메시징 경험을 원합니다 그것은 완전히 의미가 있습니다 -하지만 아직도 미국 에선 특히 그렇습니다 그들 모두를 지배 할 한 가지가 없지, 그렇지? 일반적으로 전화 번호 전화를 할 수있을뿐 아니라 텍스트도 허용합니다 iMessage를 사용한다면 완전히 매끄러운 프로세스입니다

Android에서 iMessage를 사용하려면 무엇이 필요합니까? 분명히 어떻게 든 Mac mini가 포함되어 있습니다 – 저기있다 그래서 몇 년 동안이 시도가있었습니다 많은 솔루션이 집중되었습니다 Android 휴대 전화에 iMessage를 어떻게 jerry-rig할까요? 그것은 실제로 잘 작동하지 않습니다

애플은 그걸 꽤 빨리 내리는 경향이있다 그러나 누군가 실현 한 것 최근에 맥 컴퓨터를 기본적으로 메시지를 ping하는 중앙 장치, 전화 측에서 앱을 만들 수 있습니다 그것과 인터페이스합니다 Apple 또는 Mac 제품을 소유하고 있지 않습니다 내 크롬 북과 내 Android에 있습니다

내 안드로이드 마모 장치 예 그래서 나는 맥에 엄청난 돈을 떨어 뜨릴 생각이 없었다 따라서 이것이 작동하려면 Mac이 필요합니다 요세미티를 실행할 수있는 1010 이상

– 전혀 나쁘지 않습니다 – 실제로 2010 년 Core 2 Duo High Sierra를 실행 중입니다 – 오, 알았어 – 놀랍습니다 – 나쁘진 않아

– 솔직히 말해서 – 정말로해야 할 일은, 달리기뿐 아니라 iMessage, 실행해야 할 프로그램이 무엇입니까? – 에어 메시지 라 불렀네 – 항공 메시지 그리고 그것은 단지 두 가지 소프트웨어 일뿐입니다 휴대 전화에 메시징 클라이언트 인 앱이 있습니다

솔직히 꽤 똑같아 보인다 Android의 메시지 앱에 이미 있습니다 그리고 나서 서버 측의 작은 조각입니다 소프트웨어, Mac에 앉아, 그리고 원한다면 당신은 솔직히 이베이에서 맥 미니를 살 수있다 50 달러 이하면 그렇게 할거야

– 여기 다른 장점은 너가 이것 같이 무언가를하면, 당신은 완벽하게 될 수있는 Mac Mini를 가지고 있습니다 Plex 서버처럼 실행하거나 또는 Mac을 사용하는 경우, 또는 다른 누군가는 오래된 Mac과 비슷하지만, 또는 당신은 아주 새로운 것이있는 경우에도, 당신이 할 일은 단지 짐을 싣기 만하면됩니다 이 소프트웨어와 안드로이드 폰 iMessage와 함께 갈 준비가되었습니다 Android 용 iMessage : 좋아하는 전화를위한 블루 버블 메시징! – 놀랍지 만 변장조차하지 않습니다 그들은 이것이 문제라는 것을 알고 있습니다

그것은 똑바로 앞면과 센터, 푸른 거품 메시지 – 오, 인터넷에서 왔어 너 정말로하고 싶어? 인터넷에서 뭔가를 열어? – 인터넷에 대해 들었어 – 좋지 않아 – 빨리 끝났어! 알았어 그래서 이미 올라간다

멋지다 좋아, 좋아 – 그럼 그냥 술집 꼭대기에서 작은 프로그램으로 실행되는거야? – 술집 꼭대기의 작은 프로그램 얼마나 많은 클라이언트가 연결되어 있는지, 좋은 작은 보안 것입니다, 그리고 당신에게 선호도를줍니다 몇 가지 다른 방법으로 연결할 수 있습니다

그리고 이것은 실제로이 프로젝트에서 실제로 큰 문제입니다 매 시도마다 항상 매우 불안해했습니다 다른 사람의 서버를 거쳐야했습니다 – 그래, 나는 그걸 처리하고 싶지 않아 – 그래, 그거 미친 스케치 야

장치에 곧바로 연결하고 바로 연결하기 만하면됩니다 – 아, 그럼 사실 몇가지해야 할거야 DNS 설정에서 포트 전달이 설정되어 있는지 확인하십시오 – 우리는 그렇지만 좋은 소식은 죽은 사람이 단순하다는 것입니다 믿을 수 없을 정도로 잘 작동합니다

– 이메일을 사용해야 할 것 같네요, 그렇죠? Apple ID에 전화 번호가 붙어 있지 않은가? – 네, 전화 번호 부분이 좀 개략적인데, 하지만 누군가에게 메시지를 보내면 정상적으로 팝업됩니다 이메일이 아닌 전화 번호로 – 권리 – 너도 알다시피, 변명의 여지가있다 정확히 내가 한 일입니다 나는 방금 말했다, 제로

왜 그런 일이 일어 났는지 나는 모른다 – 나는 정말로 실제로 공정한 소수의 사람들을 생각해 어쨌든 이메일로 iMessage를 사용 하시겠습니까? – 나도 몰라 나는이게 처음이야 – 또한 스캔 빈도를 확인할 수 있습니다

새로운 메시지를 위해, 그것은 다소 깔끔합니다 그렇다면 일반적으로 얼마나 자주 설정 하시겠습니까? – 보통은 1 초로 유지합니다 아무것도 막히지 않도록하십시오 그리고 Air Message에 오신 것을 환영합니다 이제 우리가해야 할 일은 포트 포워딩을 설정하는 것입니다

그럼 이건 – 이건 아주 당신의 라우터가 무엇인지에 달려 있으며, 하지만 기본적으로 라우터에 로그인해야합니다 항공 메시지가 원하는 항구를 분명히하십시오 당신의 전화에 나가기 위하여 설치 될 것입니다 여기에 다른 이점이 있기 때문에, 분명히 할 필요가 없다는 것입니다

Wi-Fi에 휴대 전화를 가지고 있죠? 그래서 나는 우리가 할 전화가 있다고 생각합니다 여기에서 사용하는 것은 S10e입니다 Wi-Fi를 사용하지 않고 아무 문제도 표시하지 않습니다 어디에서 LTE에 연결 되었든간에, iMessage는 다음과 같은 방식으로 작동합니다 당신이 아이폰을 사용한다면 당신은 그것을 기대할 것이다

– 따라서 톤이있는 DDNS 서비스를 사용합니다 아주 사용하기 쉬운 무료 놀라운 것들 중, 기본적으로 가짜 웹 사이트를 만들 수 있습니다 당신의 IP가 바뀔 때 그 점을 가리키고 있습니다 그런 다음 웹 사이트를 앱에 넣습니다 귀하의 휴대 전화에 살거야

따라서 항상 IP를 변경해야하는 대신, 그 중 하나는 오래된 프로젝트 중 하나 였고, 시도한 후 IP 주소를 30 분마다 변경합니다 – 괜찮지 않아 – 괜찮지 않아 그래서 그래, 그리고 이것으로, 당신이해야 할 일은 단지 호스트 URL을 원하는대로 선택하십시오 – 푸른 거품 소년 만이 유일한 방법이라고 말하고 싶습니다 – 푸른 거품 소년이 갈 유일한 방법입니다, 그리고 나서 그들은 모든 종류의 – – 당신이 활용할 수있는 다른 도메인

그래서 합법적으로 5 분 Mac에서 설정 과정 – 예, 믿을 수 없을만큼 빠르고, 믿을 수 없을 정도로 쉬우 며, 솔직히 말해서 그들의 가이드 그들이 웹 사이트에 가지고있는 – 우리는 물론 설명에 링크 할 것입니다 그래, 사용하기가 쉽지 않아 – 진정해 다음 단계는 전화로 다운로드해야합니다

– 네, 여기 정말 멋집니다 에어 메시지 앱은 사이드로드 할 필요가 없습니다 Play 스토어에 있습니다 이것은 전에 결코 행해지 지 않았다, 당신은 항상 그것을로드해야했습니다 너 정말 기술적으로 아니야

규칙을 어기는 거 맞지? 내 말은, iMessage가 Mac에 정확히 도착하고 있다는 것입니다 그것이 의도 된 방식이며, 단지 그런 일이 일어나는 응용 프로그램 메시지를 다른 것으로 전달하십시오 – 맞아 – 귀하의 안드로이드 전화에서 애플 메시징, Mac 컴퓨터가 필요합니다 이봐 요, 난 사실 정말 놀랐어요

Play 스토어에서 확인하시기 바랍니다 – 나는 그저 느끼는 양만 생각해 비 스케치 한 일, – 그래 – 지금까지 간다 – 안녕! – 거기 있네

– 암호를 올바르게 입력하면 작동합니다! 알았어 그래서 너에게 메시지를 보낼거야 파란색 거품 소년에서 작동하는지 확인하십시오 – 그래,가 – 그래서 MMS로 나타납니다

오, 우리가 간다, 우리는 파란색이야, 괜찮아! 안녕하세요 – 거기는 – 안녕! – 붐 – 하이 버블 보이 친구! – 그리고 그것은 – – 완벽 해! – 응, 완벽 해 심지어 바로 거기, 알림, 당신은 읽음 또는 답장으로 표시가 있습니다

네가 가진 것처럼 – – 다시, 우리는 와이파이가 아니야 그래서 맥 미니와 나의 전화는 wifi에있다, 그러나 S10은 특히 LTE를 기반으로합니다 일단 당신이 한 번 이 부분을 설정하면 모든 것이 완벽하게 이루어집니다 – 네가 어디든 갈 수있어 그것은 놀라운 일입니다

이것이 제 삶을 합법적으로 바꿔 놓았습니다 사람들은 저에게 말합니다 – 이거 꽤 괜찮아 이것은 적절하게 차갑다 당신이 당신의 안드로이드에 iMessage를 갖기를 원한다면 푸른 거품 소년에게 올라간다

왕국? – 나는 그걸 부르는 걸 좋아해 정상적인 인간처럼 취급합니다 당신도이 앱을 설치하면 사랑을 찾을 수 있습니다 사람들이 너와 너의 부모를 존경 하리라 너에게 말할 것이고 너의 친구들이 너에게 말할 것이다

LG V40이나 은하계가 있더라도 -이게 개인적인 문제인 것처럼 들리네, 이들은 분명히 개인적인 문제입니다 – 아뇨, ​​파란색 거품 때문에요 그것은 개인적인 것이 아닙니다 좋아, 그건 좀 개인적이야

JRPG BARU HIGH RATINGS REKOMENDASI – PROJECT BABEL ANDROID #1

안녕 친구 KazTem, 이번에는 Project Babel을 연기했습니다 이 게임은 일본어를 사용하는 RPG 게임 (JRPG)입니다

전 세계적으로 출시되는시기를 모르겠습니다 나는 taptap에서 다운로드 받았고 작은 Project Babel 게임의 크기는 약 80MB였습니다 게임에서 900MB 정도 다시 다운로드해야합니다 다운로드 900 메가 바이트 꽤 큰, 먼저, 나는 문자 이름을 입력 내 캐릭터 이름 Kagetora 또는 Kagezama 무엇입니까? 카게 사마 체크리스트를 선택하고 OK를 탭하면 Project Babel 게임이 시작됩니다 와우, Project Babel 그래픽은 훌륭합니다

놀랄 만한 오른쪽 아래 구석에있는 캐릭터 이미지의 디자인은 매우 멋지다 그러나 이것은 여전히 ​​일본어를 사용하기 때문에 나는 게이머의 본능에 따라 놀 것이다 >> ???? : 거기에 매달려! >> ????? : 더 이상 혼자주세요 >> ???? : 내가 말하지 않을 약속입니다 >> ???? : 자, 가자 자유가 좀 더 있습니다

>> ????? : 미안하다 나는 이것을해야만한다 >> ???? : 좋은 잊을 것이 있나요? >> ????? : 안녕히 계십시오 나는 아무 것도 놓아주고 싶지 않아

나는 나와 함께 살고 싶어 그것이 일어나지 않으면 나는 적어도 기록을 남기고 싶다 나는 확실히 여기에 있었다 이 세상에서 나는 사랑했다

너와 함께 >> 라이 : 정전이라도! >> 라이 : 안녕, 행운을 빌어! >> 라이 : 젠장 안돼? >> 라이 : 만세! >> 라이 : 정전은 큰 문제 야 >> 울리 알 : 오, 네 시간이야

나는 뒤에서 청소하고있다 >> 라이 : 좋아! >> 울리 : 그건 >> 라이 : 울리 산, 알았지? >> 울리 올 : 항상 그렇습니다

아무데도 상처 입는 노인은 없습니다 나는 걱정하지 않아요 이것은 강철 바벨 마을입니다 숲으로 둘러싸인 타워 많은 시민들이 살고있었습니다

의회가 결정한 법률에 따라 시민은 자신의 적성에 따라 일합니다 버틀러는 보안을 보호합니다 비좁은 날 일 수 있습니다 그러나 모든 사람이 다른 삶의 방식을 알지 못하기 때문입니다 불만이 없었습니다

혼자, 라이라는 소년을 제외하고 그것은 영혼에 쉽게 받아 들여질 수있는 헌법이기 때문에 왜냐하면 나는 상처를 입었고, 다른 사람들은 상처를 입었습니다 그게 그 소년이이 방에있는 이유입니다 그것은 갇혔다 Toki 1119, 오늘 1 장 바벨로부터 모든 것이 시작됩니다

친구들 만나자 >> Pokke : 좋은 하루 되세요! 자, 오늘 친구도 사귀자 >> Pokke : 상대방은 Pokke이고 나는 >> Itaku : 매번 친숙한 Itaku입니다 >> Itaku : 음,이 인사말에 질려합니다 >> Pokke : 그것은 이미 10 년입니다! >> 라이 : 10 년

나는 많은 친구들을 사귀어 >> Itaku : 오 그러나 나는 친구를 사귀는 방법을 궁금해

>> 라이 : 나는 그것을 좋아한다 Pokke는 첫날에 말했다 >> Pokke : 글쎄, 그날 나는 긴장했다 >> 포케 : 나는 라이에 대해 몰랐고 >> 라이 : 무서웠어요? >> Pokke : 그래 솔직히 말해서, 나는 아직도 두렵다 >> Pokke : 라이가 영혼에 잡혀 있다면

어떻게해야합니까 나는이 방에 올 때마다 생각합니다 >> Itaku : 나는 그 뻣뻣함을 안다 라이는 라이가되지 않습니다

라이는 사라진다 >> 라이 : 너 알 잖아 우리가 매일 이렇게 말하는거 아니니? >> Pokke : 그래 그리고 매일 당신에게 감사합니다 오, 라이는 오늘도 여전히 라이 야

>> 라이 : 구거 —! >> Pokke : 그래, 내 평소 라이 >> 라이 : 말하자면, 최근에 많은 정전이있었습니다 >> Itaku : 정말로 >> 라이 : 궁금해? >> Itaku : 오 그러나 곧 회복했기 때문에 좋았습니다

DevBytes: Android 4.4 Transitions

안녕하세요 저는 Chet Haase입니다

Android UI Toolkit 팀의 엔지니어입니다 오늘은 새로운 애니메이션에 대해 이야기하겠습니다 기능을 제공합니다 전환이라고합니다 전환을 사용한 아이디어는 실제로 많은 것들 뒤에있는 아이디어 우리가하는 일은 당신을 위해 일을 쉽게하려는 것입니다

안드로이드 응용 프로그램 개발자, 사용자에게보다 풍부한 경험을 제공하려면, 잘하면 적은 노력으로 전환, 그것은 단순한 생각입니다 기본적으로 다른 장면을 설명하는 방법입니다 애플리케이션에서 미리 레이아웃 리소스로 파일 또는 동적으로 변경 될 수 있습니다 변경 사항을 적용하여 변경 사항을 애니메이션으로 적용 할 수 있습니다

그러한 변화가 무엇인지 그리고 당신은 방해가되지 않고 방금 도망 갈 수 있습니다 화면 전환이 자동으로 실행되게하십시오 더 많이 관여 할 필요없이 이러한 수동 애니메이션을 실행하십시오 UI에서 애니메이션을 만드는 전형적인 모델입니다

바라건대, 하루가 끝날 때, 보다 풍부한 응용 프로그램 경험을 얻을 수 있습니다 직관적 인 방식으로 화면에서 더 많은 것들을 움직여서 사용자가 더 풍부한 경험을 얻을 수 있습니다 그리고 그들은 더 나은 이해를 얻습니다 응용 프로그램이 실제로 어떻게 작동하는지 너는 자연적으로 변화 할 수 있기 때문에 응용 프로그램의 서로 다른 장면 사이에서 그리고 세계에는 더 많은 애니메이션이 있습니다

나는 항상 그것을 좋아한다 승인 이제 슬라이드를 살펴 보겠습니다 그리고 API가 어떻게 작동하는지에 대한 간략한 개요를 살펴 보겠습니다 다른 부분은 뭐지? 제가 여기서 건너 뛰는 세부 사항이 많이 있습니다

그러나 당신은 무료이며 체크 아웃하는 것이 좋습니다 참조 문서의 상세 developerandroidcom에 대한 기사, 또한 나중에 조금씩 볼 수있는 API 데모를 제공합니다 우리는 그것의 일부 코드를 살펴볼 것입니다 승인

먼저 장면의 개념부터 시작합니다 당신은 이것을 레이아웃으로 생각할 수 있습니다 기본적으로 뷰 계층 구조입니다 이 특정 장면이 어떻게 생겼는지 설명합니다 이것은 전체 응용 프로그램의 장면 일 수 있습니다

특정 화면에서 또는 하위 계층 구조 일 수 있습니다 이 특별한 경우, 장면 우리가 텍스트보기, 편집 텍스트 및 단추가 있습니다 아주 간단합니다 그리고 우리는 또 다른 장면을 가지고 있습니다 다른 레이아웃 파일을 통해 설명 할 수 있습니다

거기에 다른 텍스트보기가 있습니다 조금 더 풍부 해졌습니다 텍스트, 거기에 더 자세한 내용 하지만 편집 텍스트 필드와 버튼이 있습니다 그리고 아마도 이것들은 공유 된 구성 요소입니다

어쩌면 그들은 위치를 옮겼을 수도 있고 크기를 바꿀 수도 있습니다 하지만 실제로는 두 장면에서 공유됩니다 사용자가 이해하도록 도울 수 있다면 좋지 않을까요? 애플리케이션에서 장면 1에서 장면 2로 이동하면, 사라지는 일들이 사라지면서 일어난 변화들, 그 안에있는 퇴색하는 것들이 존재하게되었고, 이 장면들 사이에서 공유 요소의 크기를 조정할 수 있습니까? 그것은 전환이 무엇에 관한 것입니다 이러한 서로 다른 장면을 지정합니다 그리고 나서 당신이 한 장면에 갈 때, 자동으로 애니메이션을 시작하고 필요한 애니메이션을 실행합니다

그 변화를 만들기 위해서뿐만 아니라 시간이 지남에 따라 변화를 애니메이션으로 나타낼 수 있습니다 그럼 장면을 살펴 봅시다 이들은 당신이 만든 모듈들입니다 귀하의 응용 프로그램에 대해 정의 된, 다른 화면, 만약 당신이 귀하의 신청서가 시간이 지남에 이러한 장면을 다른 방법으로 만들 수 있습니다

우선, 장면에는 항상 루트 또는 ViewGroup이 있습니다 기본적으로 그들과 관련되어있다 장면이 살아있는 계층 구조 전환이 일어날 것입니다 그래서 그 루트로 직접 씬을 만들 수 있습니다 EnterAction을 설정할 수 있습니다

그리고 그 장면이 입력 될 때마다, Runnable에 콜백이 생깁니다 그리고 어떤 코드라도 실행할 수 있습니다 어떤 조작을하고 싶다 당신은 뷰 계층 구조로 가고 싶다 매우 간단합니다

다른 방법보다 조금 수동입니다 장면을 만들 수 있습니다 예를 들어 ViewGroup에서 대신 생성 할 수 있습니다 일부 레이아웃 ID에서 계층 구조를 확장했다고 가정 해 보겠습니다 이 ViewGroup을 거기 앉아 있습니다

해당 ViewGroup을 사용하여 씬을 생성 할 수 있습니다 기본적으로 두 개의 ViewGroup을 제공합니다 장면 계층 구조의 루트로 생성 할 수 있습니다 장면 그 자체의 뿌리뿐만 아니라 그래서 당신은 그것을 전달합니다 당신은 씬을 만들었습니다

넌 잘하는거야 이제 장면이 입력되면, 해당 ViewGroup을 보도록 장면을 간단히 변경합니다 대신에 무엇을 해야할지 말할 필요가 없습니다 계층 구조를 조작합니다

ViewGroup에서 해당 정보를 가져옵니다 당신은 생성자에서 그것을 전달했습니다 마지막으로, 우리는 마지막 것과 매우 비슷한 것을 가지고 있습니다 그러나 ViewGroup에 전달하는 대신, 레이아웃 리소스 ID를 넘겨줍니다 그리고 그 장면이 입력되면, 그것은 자원을 부 풀릴 것입니다

그리고 그것은 앞으로 나아가고 그것을 장면 루트에 추가 할 것입니다 똑바로 레이아웃 리소스도 시작됩니다 리소스에 암시 적으로 장면을 만드는 경우 우리는 조금 나중에 보게 될 것입니다 자동으로 전환 관리자를 사용할 수 있습니다

주어진 레이아웃 리소스 ID를 암시 적으로 장면을 팽창시킵니다 그리고 그것은 두포에서 같은 메커니즘을 사용합니다 다음으로 전환을 살펴볼 수 있습니다 이들은 선언 책임이있는 엔진입니다 사물이 바뀌면 너는 무엇을하고 싶은가? 애플리케이션에서 장면에서 장면으로 그래서 이것들은 기본적으로 변경 전후에 듣습니다

그 값들을 비교하라 그리고 어떤 관점에서도 일어난 변화를 기반으로 장면 계층에서 애니메이터를 만듭니다 그런 다음 변경 사항을 애니메이션으로 실행합니다 전환을 만드는 데는 몇 가지 방법이 있습니다 이러한 것들을 직접 만들 수 있습니다

우리는 프레임 워크에 이미 정의 된 것을 가지고 있습니다 이동하고 크기를 조정하는 ChangeBounds가 있습니다 장면간에 변경되는 오브젝트 상황에 따라 퇴색하는 퇴색이 있습니다 그들이 장면 변경 사이에 오르거나 갈 것인지 여부

그리고 TransitionSet도 있습니다 이것은 AnimatorSet과 같은 트랜지션에 해당합니다 그것은 기본적으로 그룹입니다 그것은 여러 가지 전환을 안무의 방법입니다 TransitionSet을 만든 다음 모든 전환기 자녀들에게, 함께 또는 순차적으로 실행합니다

또한 집합 계층 구조 일 수도 있습니다 따라서 훨씬 복잡한 메커니즘을 가질 수 있습니다 병렬 또는 여러 개의 전환이 실행됩니다 더 재미있는 애니메이션을 얻기 위해 경험 마지막으로 전환을로드 할 수 있습니다

그게 당신이가는 길이면 리소스 파일에서 자원에서 실행하려면, 이것은 당신이 그것을 할 수있는 방법입니다 이 예는 TransitionSet입니다 자동으로 추가 된 두 개의 자식이로드 된로드됩니다 가시성의 변화를 경청하는 것, 크기 및 위치뿐 아니라 리소스 파일, 그렇지 않을 수도 있습니다

이미 코드를 사용하고 있기 때문에 코드에서 수행하려는 작업 UV 코드 비행 중에 이러한 것들을 만드는 것은 쉽습니다 다른 한편으로 이것은 이것이 메커니즘이다 그것이 부 풀릴 때 Transition Manager에서 사용하는 우리가 곧 볼 수있는 정보의 그래프, 이 슬라이드에는 아직 없습니다 마지막으로 사용자 지정 전환 아이디어가 있습니다

그래서 우리는 내가 말했듯이, 몇 가지 표준적인 변환을 정의했다 자동 전환 기능이 즉시 사용됩니다 보기를 이동하고 크기를 조정하는 ChangeBounds가 있습니다 가시성을 다루는 페이드도 있습니다 정보가 사라지고 사라집니다

매우 간단합니다 아마도 대부분의 경우 원하는 동작 일 것입니다 그러나 자신 만의 전환을 정의하려는 경우 – 예를 들어, 만약에 무언가가 생기면, 당신은 화면 중간에서 페이드 인하는 것을 원하지 않았다 그것이 사는 곳에서, 그러나 당신은 실제로 원합니다 오른쪽에서 밀어 넣으려면 당신은 커스텀 트랜지션을 작성할 수 있습니다

단순히 전환 클래스 자체를 하위 클래스로 만들면됩니다 그런 다음 세 가지 방법을 재정의합니다 그것은 당신이하고 싶은 일을합니다 두 가지 캡처 방법이 있습니다 하나는 응용 프로그램이 시작될 때 값을 캡처합니다

코드는 말했다, 좋아, 전이 할 준비가되었다 그것이 당신이 원하는 시점입니다 captureStartValues ​​메소드를 호출합니다 그리고 당신은 앞으로 나아가서 뷰 객체들로부터 읽습니다 당신이 원했던 모든 것은 전환에 영향을 미쳤습니다

예를 들어 레이아웃 위치를 읽을 수 있습니다 또는 당신이 관심을 갖는 가시성 정보 그리고 captureEndValues를 호출합니다 트랜잭션이 실제로 실행되기를 원할 때, 언제 시작하길 원하니? 그리고 나서 마침내 전화를받을 수 있습니다 그 후에 createAnimator 함수에 그 값들을 비교하고, 좋아, 좋아, 이 가시성 값이 변경되었습니다

그리고 그것은 제가 염려하는 것입니다 따라서 애니메이션을 만들어서 다음과 같이한다 오른쪽에서 밀어 넣는다 또는 그것이 무엇이든간에 해당 애니메이터를 반환합니다

그런 다음 전환 시스템이 실행합니다 그래서 우리는 단지 많은 것들을 가지고 있습니다 프레임 워크와 함께 무료로 배송 할 수 있습니다 전환을 실행할 때 암시 적으로 사용하십시오 그러나 사용자 정의 전환을 공정하게 만들려면 그렇게하는 것이 간단합니다

승인 이제 씬을 얻었습니다 당신은 전환이 있습니다 실제로 장면을 어떻게 바꾸나요? 한 장면에서 다른 장면으로 어떻게 가나 요? 당신은 단지 장면을 입력 할 수 있습니다 거기에 아무런 변화가 없습니다

기본적으로 말하기 만하면됩니다 너를로드하기를 바라는 장면 그리고 그렇게 할 것입니다 Runnable에 있던 코드가 실행됩니다 그것은 당신이 준 레이아웃 리소스 파일을 부 풀릴 것이고, 도대체 무엇이

현장에 들어갈거야 그곳에는 아무 것도 없습니다 물론 재미있는 애니메이션이 아닙니다 또는 장면 전환 관리자에게 장면으로 이동하도록 지시 할 수 있습니다 그리고 그 과정에서, 도중에 기본 전환을 사용합니다

그것은 말할 것입니다, 좋아, 나는이 장면으로 갈 것입니다 그리고 그동안 저는 StartValues를 캡쳐 할 것입니다 captureEndValues를 실행하고 기본 전환을 실행합니다 시스템 용 또는 사용자 지정 전환을 사용하여 실행할 수도 있습니다

당신은 말할 수 있습니다 좋아,이 멋진 전환을 정의했습니다 내가 갈 때 사용하고 싶다 이 특정한 장면 조합 사이에서, 그리고 지금 진행 전환 중 하나를 사용하여 전환 또는 전환 관리자에서 이동 메소드를 선택합니다 실제로 새로운 장면을로드합니다

그런 다음 사용자 정의 전환을 실행하십시오 전환, 단순화, 내가 여기에서 언급하지 않은 또 하나의 것이있다 이것은 전환 관리자의 아이디어입니다 당신은 보통 당신이 말하는 일회적 인 일을 위해서 이것을 사용할 것입니다, 전환 매니저,이 장면에 가고 싶습니다 내 사용자 지정 전환을 여기에서 사용하십시오

그것이 할 수있는 또 다른 일은 전체 정보 그래프를 지키다 모든 전환 조합에 대해 모든 장면 조합에 대해 원하는 것 당신이 당신의 신청서에 가지고있는 나중에 데모에서 조금씩 보게 될 것입니다 하지만 여기서 마지막으로 한 가지를 지적하고 싶습니다 마지막 흥미 진진한 슬라이드에 이 모든 정보를 가지고,이 모든 다른 클래스들 그것에 대해 생각하고 장면을 가지고 있어요 전환이 있었지만 실제로는 대부분의 개발 사례에서 애니메이션을 더 간단하게 만드는 것이 었습니다

그래서 일반적으로 유일한 방법은 아마도 이게 신경 쓰일거야 TransitionManagerbeginDelayedTransition을 호출합니다 그런 다음 장면 루트를 지정합니다 전환을 실행하고 싶습니다

그것이하는 일은 그 모든 과정에서의 킥입니다 현재 값을 캡처 할 것입니다 그러면 레이아웃과 렌더링이 실행됩니다 그리고 그 틀의 중간에, 최종 가치를 포착 할 것입니다 어떤 것이 있는지 파악한 다음 실행하십시오

당신을위한 자동 전환 대부분의 경우, 이것이 실제로 걱정하는 모든 것입니다 그것은 기본적으로 역동적 인 변화입니다 이것을 창조 및 애니메이션으로 생각할 수 있습니다 역동적 인 장면

따라서 이러한 미리 굽는 장면을 갖는 대신 레이아웃 리소스 ID를 사용하면 기본적으로 다음과 같이 말할 수 있습니다 좋아요 전환을 실행하여 준비하십시오 그때까지 나는 갈거야 변화를 일으킬 수 있습니다

그리고 나서 그 변화가 실제로 일어날 때까지 시작, 측정 및 레이아웃 실행, 시스템은 새로운 프레임을 그릴 준비가됩니다 그런 다음 전환이 시작되고 델타를 계산하고, 변경 사항을 파악하고 애니메이션을 만들고, 실행중인 애니메이션을 시작하십시오 매우 간단합니다 한 줄의 코드 좋은

승인 이제 데모를 간략하게 살펴 보겠습니다 KitKat과 함께 제공되는 API 데모 중 하나입니다 그래서 샘플에서 다운로드하도록 권장합니다 그리고 당신은 이것을 실행할 수 있고 그것으로 놀 수 있습니다

당신의 심장 내용 완전히 복잡하고 흥미로운 데모 그래서 여기 네 장면을 정의했습니다 그리고 장면은 사용자 정의보기를 사용합니다 그래서 특별한 이유가 없습니다

버튼 일 수 있습니다 나는 대신 그들에게 색깔의 직사각형을 만들어 냈습니다 그래서 우리가 장면들 사이에서 바꿀 때, 우리가 크기를 조정하는 것을 볼 수 있습니다 이것들을 재배치 그리고 우리는 그냥 바꿀 수 있습니다

취소 중입니다 우리가 방해하고 있습니다 우리는 다른 장면 전환을 실행 중입니다 매우 간단합니다 이제 데모 코드를 살펴 보겠습니다

여기에는 몇 가지 다른 조각이 있습니다 첫째, 몇 가지 레이아웃 파일이 있습니다 그래서 우리는 전환 장면 1을 가지고 있습니다 이것은 단지 레이아웃이 있습니다 그리고 거기에는 네 가지 견해가 있습니다

적절히 배치 전환 장면 2는 매우 비슷합니다 그것은 단지 크기와 위치가 다릅니다 색깔이있는 직사각형의 경우 전환 3은 합병증을 추가합니다

중간에 그레이 스케일 사용자 정의보기가 있음 그곳에 따라서 레이아웃 리소스에서 실제로 흥미로운 것은 없습니다 파일 하지만 나중에 리소스에서 언급 한 내용을 볼 수 있습니다 우리가 전환 관리자를 위해 팽창시킨 우리는 정의한 전환 정의를 가지고 있습니다

이것은 단순히 ChangeBounds입니다 여기서는 정말 흥미로운 것이 없습니다 그것은 단지 표준 ChangeBounds입니다 우리가 달릴거야 그러나 나중에이 리소스를 참조합니다

우리가 전환 관리자를 부 풀릴 때 다음은 좀 더 재미있는 이야기입니다 이것은 TransitionSet입니다 기본 모드로 실행됩니다 모든 전환이 병렬로 실행됩니다

동시에 ChangeBounds가 실행됩니다 그것은 페이드 전환을 실행할 것입니다 그리고 페이드는 특정 관점을 목표로 삼을 것입니다 또한 ID를 사용하여보기와 연결합니다 즉, 페이드는 일반적으로 적용되지 않습니다

화면의 모든 것,하지만 우리는 말하고 있습니다 이 특별한 전환을 계층 구조의이 특정보기에 표시됩니다 페이드 아웃은 매우 유사합니다 이 경우에도 진행됩니다 순차적으로 전환을 실행합니다

그래서 그것은 ChangeBounds를 실행할 것입니다 위치와 크기를 변경하십시오 그리고 그 일이 끝나면, 그것은 페이드를 돌 것입니다 그리고 마지막으로 전환 관리자가 있습니다 우리는 아직 보지 못했습니다

이것은 무엇의 그래프를 유지하는 객체입니다 장면에서 장면으로 가면서 당신이 원한다 귀하의 신청서에 너 여기서 정의 할 수있어 내 말은, 네가 어떤 관습도 필요 없다면 전환이 발생하면 전환 관리자는 신경 쓰지 않습니다 전환을 실행하면됩니다

그러나 당신이 장면 1에서 장면 2로 갈 때 당신이 신경 쓰면, 이 특별한 커스텀 트랜지션을 원하지만, 장면 2에서 장면 3에 다른 것을 원하면 최소한 리소스 파일에서 정의하는 방법입니다 따라서 전환 관리자를 만듭니다 그런 다음 여러 개의 전환 객체가 있습니다 원하는 상호 작용을 정의하는 이러한 특정 장면 변경에서 그래서 우리는 레이아웃 파일을 참조하는 fromScene을 가지고 있습니다 그리고 그것은 암묵적으로 팽창 할 것입니다

해당 레이아웃 리소스 파일을 열고 그 중에서 장면을 만듭니다 우리에게는 toScene이 있습니다 같은 것 레이아웃 파일에서 장면을 생성합니다 그리고 나서 우리는 그것이 다른 전환 자원에서 참조하려고한다

우리가 방금 보았던 것과 같은 파일 그게 전부 자원입니다 이제 transitionsjava에있는 코드를 살펴 보겠습니다 또한 API 데모에서는 Animations 디렉토리에 있습니다

그리고 그것은 단순 전환이라고합니다 그리고 여기 있습니다 여기에 많은 코드가 없습니다 전환 관리자가 부 풀리게됩니다 음, 우리는 천이 기 Inflator를 얻습니다

그리고 나서 우리는 Transition Manager를 팽창시킵니다 그리고 우리는 그 과정에서 세 장면을 만듭니다 그리고 우리는 3 개의 장면 만 생성한다는 것을 알 수 있습니다 그러나 데모에서는 실제로 4 개가있었습니다 그리고 우리는 몇 분 안에 그 이유를 보여줄 것입니다

우리가 코드에서 장면을 필요로하는 유일한 이유 여기가 우리가 지정한 곳입니다 그들은 특정 장면으로 전환하려고했습니다 우리는 이미 전환 관리자에게 말했습니다 우리가 장면을 따라 갈 때 어떤 장면 전환이 실행되는지 그리고 여기, 우리는 실제로 그 장면에 대한 참조를 얻고 있습니다

그리고 좋아, 이제 나는 움직이고 싶다 장면 1, 장면 2, 장면 3 그리고 우리가 여기서 하죠 데모에서 라디오 버튼을 클릭하면, 우리는이 품목 중 하나에 전화를 겁니다 그리고 우리는 말합니다, 좋습니다, Transition Manager, 저는 다음 장면으로 넘어 가기를 바랍니다

그리고 그것은 갈 것입니다 장면이로드됩니다 변경 사항을 파악하고 전환을 실행합니다 전환 관리자 리소스에서 지정한 우리가 본 파일 마지막으로 거기에 네 번째 장면이 있습니다

이 장면 객체와 아무 관련이없는 우리가 팽창시킨 그러나 대신, 이것은 제가 언급 한 것입니다 우리는 기본적으로 동적 인 장면으로 이전에 즉석에서 뷰 계층 구조 변경 전환 관리자가 있어야합니다 또는 전이 시스템, 일반적으로, 기본적으로 모든 변경 사항이 자동으로 애니메이션으로 표시됩니다 마법 메서드를 호출하고 beginDelayedTransition을 호출합니다

우리는 우리가 작업 할 장면 루트를 제공합니다 Set newSize라는 헬퍼 메서드를 호출합니다 기본적으로 우리는 임의적으로 변경합니다 뷰 계층 구조 내부 여기에 온다

뷰에 몇 가지 새로운 레이아웃 매개 변수를 설정합니다 그러면 내부적으로 요청 레이아웃이 생성됩니다 장면 루트 안의 것들이 중계 될 것입니다 다시 렌더링되었습니다 그리고 그런 일이 생길 때, Transition System 상황이 바뀌 었다는 것을 알아 차렸다

자동으로 전환을 실행합니다 당신이 데모에서 본 바와 같이, 이 단일 코드 줄로 내용의 크기가 조정됩니다 그래서 그것은 전환입니다 KitKat의 새로운 기능입니다 나는 시간이 지남에 따라 더 많이 일할 것으로 예상한다

지금은 상당히 간단하고 간단합니다 그리고 더 중요하게는 단순 해지기를 바랍니다 더 풍부한 안드로이드 응용 프로그램을 만드는 데 사용할 수 있습니다 감사

top scariest apps available on android and ios || scary apps which you should never install

안녕 얘들 아, 그 중에 있다면 초자연적 인 활동을 믿는 사람 또는 유령과 관련된 것들을 아는 것에 관심이있는 사람들 Play 스토어 또는 앱 스토어가 유용 할 수 있습니다 당신이 그 사람들 중 하나라면 이 모든 것을 믿지 않는 사람 또는이 모든 오싹한 것들을 두려워하지 마십시오

그래서 나는 당신에게 그런 소름 끼치는 애플 리케이션에 대해 말할 것입니다 Play 스토어 또는 앱 스토어에서 사용할 수 있습니다 한 번 사용하면 너는 두려워해야한다 첫 번째 앱은 SPIRIT BOARD입니다 안드로이드 폰이 있다면 당신도 ouija 보드와 함께 어떤 정신을 호출하려고 할 수 있습니다 우리는 정말로 죽은 사람과 이야기 할 수 있니? 하지만이 응용 프로그램은 무서운 보드를 가지고 있습니다

이 소름 끼치는 일을 도와 줄 수 있어요 이 앱을 설치하고 열 때 여기에 알파벳과 숫자로 된 보드가 보입니다 planchette에 손가락을 대어 줘야 해 정신에서 질문하다 당신이 질문을 할 때 언젠가 영혼이 당신에게 대답하려고 할 것입니다

보드에 보이는 평면도가 천천히 움직이기 시작합니다 너는 어떤 정신과 대화를 경험하기 시작할 것이다 이 목록에있는 다른 앱은 I SCARE APP입니다 친척이나 친구를 겁주고 싶다면 그럼이 응용 프로그램은 정말 당신을 도울 수있다 안드로이드 폰이든, IOS 폰이든 앱을 쉽게 다운로드 할 수 있습니다

당신은 안드로이드와 아이폰 모두 에서이 응용 프로그램을 얻을 수 있습니다 그것은 또한 내가 scran 장난 꾸러기 앱이라고 불린다 이 앱은 무언가에 집중 한 후 완전히 겁나는 앱을 열면 중앙에 빨간색 버튼이 보입니다 그것 주위에 착시가있는 그리고 그 환상에서 길을 잃었을 때 갑자기 공포의 얼굴이 화면에 나타납니다 그게 정말 너를 무서워 해 다음 앱은 HER STORY입니다

이 이름을 들으면 정상적으로 들린다 하지만이 응용 프로그램을 사용하는 사람은 자신이 공포 신비와 관련이 있음을 발견 할 수 있습니다 이 앱은 Android 및 iOS에서 다운로드 할 수 있습니다 이 응용 프로그램은 TV가 아닌 다른 경험을 제공합니다 이 응용 프로그램은 그 여성들의 비디오 포멧을 보여주기 때문에 남편은 누구야? 이 앱은 당신이 여기 탐정 게임을하기 때문에 진짜 인터뷰의 느낌을줍니다

이 응용 프로그램은 몇 footej을 볼 수 있으며 여자로부터 질문을 그녀는 당신에게 대답을 해줘야 해 이 응용 프로그램은 범죄 다큐멘터리와 같은 수수께끼를 해결할 수 있습니다 얘들 아 다음 앱은 RIP VIP 사망 알림 앱입니다 이 응용 프로그램은 일부 죽은 사람과 살아있는 사람의 세부 정보를 포함 누군가 죽거나 이미 사망 한 경우 그럼이 응용 프로그램은 당신에게 그의 혹은 그녀의 죽음에 대한 경고를 보내드립니다 또한 소름 끼치는 소리 알림을받습니다 그 사람 사진과 함께 홈 화면의 배경 화면을 변경하십시오

다음 목록에 유령 센서입니다 이 앱은 모든 장소에서 사용할 수 있습니다 당신은 어떤 초자연적 인 존재를 가지고 있다고 생각합니다 이 앱은 설치하고 열 때 유령 센서와 비슷합니다 그러면 그것은 장치처럼 행동 할 것입니다 그 장치를 착용해야합니다 앱의 빗나가는 바늘로 알려줍니다

주변에 어떤 소름 끼치는 일이 있건 없건간에 다음은 Camster App입니다 이 앱에서 처음에는 이상한 것을 알 수 없습니다 그러나 그것을 사용하는 사람들에 관해 생각할 때 그때 당신은 조금 불안해 할 수 있습니다 이 앱은 앱 스토어에 있습니다 이를 통해 여러 카메라에서 연결할 수 있습니다

그것은 교통 카메라 여부, 날씨 카메라 공용 카메라 또는 감시 카메라 그래서 짧게 당신은 다른 카메라의 많은 비디오 footej를 볼 수 있습니다 우리가 추측하는 것은 좋지 않습니다 누가 너를보고 있는지 안다? 다음 앱은 WOODS입니다 이 게임을 통해 야생 scaary 숲을 탐험 할 수 있습니다 너는 초자연적 인 수사관 역할을해야 해 어떤 초자연적 인 존재를 찾는 사람 당신 손에 단 하나의 성화가 있습니다

어두운 소름 숲에서 빛을 볼 수있는 곳 하지만 너는 아무것도 없어 그 성화를 제외하고는 정말 무서워 정말 끔찍한 또 다른 소름 끼치는 앱이있다 죽음의 시계라고 불리는 이 앱을 사용할 때 너는 너의 죽음의 죽음을 알게 될거야 응용 프로그램을 연 후 양식을 작성해야합니다

양식을 작성한 후 너 괜찮아 이 응용 프로그램은 즉시 당신의 죽음의 날짜와 시간을 보여줍니다 몇 가지 앱과 소프트웨어가 더 있습니다 그것은 역방향으로 시작하고 당신에게 알려주는 카운트 다운 기능을 가지고있다 너의 인생의 며칠이 지나갔 어 당신 인생에 몇 일 남았습니까? 앱의 카운트 다운에 따라 일상 생활이 줄어들고 있습니다

네가 끝날 날이 너와 가까이있다 그래서 당신이 비디오를 좋아한다면, 채널을 구독하십시오 벨 아이콘을 누릅니다 미래의 모든 동영상에 대한 알림을받습니다 이 동영상을 좋아하는 친구들과 공유하십시오

당신이 어떤 질문이라도 가지고 있으면, 친절히 코멘트 박스에 쓴다 나는 너를 다음 비디오에서 볼거야 그때까지 잘 가라 안녕히 가십시오

Understand Kotlin Coroutines on Android (Google I/O'19)

YIGIT BOYAR : 안녕하세요 모두들 환영합니다

내 이름은 Yigit Boyar입니다 저는 Android 팀의 엔지니어입니다 이봐 요, 제 이름은 세르게이입니다 그리고 저는 같은 팀에서 일합니다 숀 매 퀸런 : 안녕하세요, 저는 션입니다

나는 Android 개발자입니다 YIGIT BOYAR : 오늘 우리는 coroutines에 대해 이야기 할 것입니다 안드로이드에,하지만 우리가 그것에 대해 이야기하기 전에, 우리가 왜 일부 코 루틴을 필요로하는지 알아 내려고합시다 그리고 그것을 이해하기 위해, 어떻게 잊어 버립시 다 당신은 안드로이드에 AI 코드를 씁니다

이것이 우리가 작성하고자하는 꿈의 코드입니다 우리는 함수 호출은 네트워크 요청을합니다 도대체 무엇이 사용자를 얻고 텍스트 필드에 설정합니다 이것은 당신이 쓰고 싶은 것입니다,하지만 당신이 그것을 쓰면, 네트워크를 만들 수 없기 때문에 예외가 발생합니다

요청을 주 스레드에서 쉬운 우리는 코드를 스레드 안에 넣고 코드를 실행합니다 이제 textView가 불평 할 것입니다 백그라운드 스레드에서 UI 스레드를 만질 수는 없습니다

그리고 OK, 우리는 이런 종류의 코드를 작성할 것입니다 비동기로 만들 수 있습니다 콜백을 제공하고, 백그라운드 스레드에서 그립니다 UI 스레드에서 콜백을 호출합니다 이 코드는 코드를 작성하는 경우를 제외하고는 잘 작동합니다

이처럼, 당신은 메모리 부족 예외가 발생합니다 콜백을 왼쪽이나 오른쪽으로 새어 나올 것입니다 이것에 대한 해결책도있다 구독에 대한 이해를 가질 수있는 곳 이 체인을 유지합니다 그리고 당신이 멈 추면 언제든지 구독을 취소하십시오

그 중 하나가 작동하지만, 당신은 이런 식으로 끝납니다 그건 그렇고, 나는 이걸 만들지 않을거야 3 년 전, 우리가 Architecture Components를 시작했을 때, Google App 코드를보고있었습니다 그리고 나는 26 라인을 가진 하나의 어플리케이션을 발견했다 [INAUDIBLE]을 (를) 등록하십시오

Google에서 일어난다면 모든 곳에서 발생합니다 우리는 항상 최고의 코드를 작성하지는 않습니다 그러나 이것에 대한 해결책도 있습니다 RxJava와 같은 것을 사용한다면 이 함수는 관찰 할 수있는, AutoDispose 라이브러리를 사용할 수 있습니다 귀하의 [INAUDIBLE] 라이프 사이클과 연관된 가입 안전하게 가입하십시오

그리고 이것은 완벽하게 작동합니다 마찬가지로 LiveData를 사용할 수도 있습니다 관찰 할 수있는 생명주기가 있어야합니다 이것은 또한 작동합니다 그래서이 오래된 문제입니다, 그렇죠? 우리가 이미 여기에 대해서 이야기하는 이유는 무엇입니까? 좋은 해결책? 매년 우리는 이러한 개발자 벤치 마크 조사를 실시합니다

우리는 개발자들에게 그들이 어떻게 행동하는지, 그들의 문제는 무엇인지 물어 본다 그리고 작년에 우리가 조사한 설문 조사 중 최고 불만 중 하나 스레딩과 동시성이었다 개발자는 이것이 Android에서 어렵다고 말합니다 가장 큰 요청 중 하나는 바로 LiveData ++입니다 사람들은 우리가 LiveData를 확장하기를 원합니다

그것을 RxJava와 같이 만드십시오 우리는 왜 그런가? 왜 이걸 원하니? 우리에게는 좋은 해결책이 있습니다 그 중 하나만 사용하십시오 그래서 우리는 우리가 모를 때 최선을 다했습니다 우리는 UX 연구를 수행했습니다

이것은 동시성에 관한 User Experience Research입니다 그래서 우리는 9 명의 개발자와 심층 면접을했습니다 그들이하는 일은 부부를 위해 정규 일을하는 것입니다 자신의 회사에서 몇 주 그리고 동시성에 관한 문제를 볼 때마다, 이 관찰 가능한 것처럼, 그들은 단지 그것을 적어 둡니다

이것이 문제였습니다 이것이 내가 어떻게 해결했는지입니다 그리고 이것이 제가 그것에 대해 어떻게 느끼는지입니다 이 연구에서 우리는 세 가지 주요 사항에 초점을 맞추 었습니다 우리의 관찰 가능한 데이터 보유자 인 LiveData에 중점을 둡니다

우리는 RxJava에 중점을 두었습니다 우리는 Reactive Extensions 라이브러리를 보았습니다 그리고 coroutines는 정지 가능한 계산을 제공합니다 그리고 그 연구의 결과에서 이것은 결론이었습니다 LiveData는 사람들이 좋아한다고 말하면서, 그러나 우리는 완전한 해결책을 원합니다

사실 재밌 네요 LiveData는 메인 스레드 외에는 아무 것도 지원하지 않습니다 그러나 우리는 동시성 연구에서 그것에 대해 이야기합니다 RxJava의 경우 놀랍습니다 사람들은 그것을 사랑하고 싫어합니다

그들은 그것이 얼마나 강력한지를 좋아하지만 일반적인 불만 사항 우리는 항상 그것이 항상 잘못 사용되고 있다고 들었습니다 과잉 느낌 그리고 코 루틴의 경우, 이것은 정말 같았습니다 최상의 솔루션 인 것처럼 보이지만 확실하지 않습니다 그것은 아주 새롭다

성숙하지 않습니다 그래서 이것은 전반적인 결론이었습니다 우리는 단순한 솔루션이 필요하다고 말했습니다 그 해결책을 배우는 것이 어렵지 않아야합니다 포괄적이어야합니다

따라서 다양한 유스 케이스로 확장 할 수 있어야합니다 그리고 그것은 견고해야합니다 테스트 스토리가 내장되어 있어야합니다 그래서 우리는 두 가지 결정을 내 렸습니다 우리가 말했지, 좋아, 우리는 일류 품질 Jetpack의 지원

그리고 우리는 RxJava에 대한 더 많은 지원을 할 것입니다 우리의 문서에서 그러나 오늘날, 그것은 coroutines에 관한 전부입니다 션, 왜 우리 한테 조금 더 말하지 그래? 무슨 coroutines에 관하여? SEAN MCQUILLAN : 고마워요, Yigit 그래서 나는 단지 5 분 걸리고 싶다

코 루틴의 문제점에 대해 조금 이야기 해보십시오 위대한 해결 그래서, 문장에서, coroutines가 해결하는 주된 문제 콜백을 대체하여 비동기 프로그래밍을 단순화하고 있으며, 이것은 아주 추상적입니다 그럼 몇 가지 샘플을보고 어떻게 생겼는지 살펴 보겠습니다 나는 가상의 네트워크 요청을 세 가지 방법으로 만들 예정입니다

첫 번째 스타일은 차단 스타일이라고합니다 결과가 직접 반환됩니다 함수에서 실행 방법을 살펴 보겠습니다 그리고 재미있게, 나는 주 스레드에서 그것을 실행할 것입니다

호출 될 때, 블로킹 네트워크 콜 호출 한 스레드를 차단합니다 따라서 네트워크 요청이 실행되는 전체 시간, 주 스레드가 차단됩니다 UI를 업데이트해야하는 스레드입니다 사용자 접촉을 처리하므로 사용자 앱이 정지 된 것을 보거나 충돌 할 수 있습니다 이제 멈추고 거기에 있다고 말하고 싶습니다

네트워크 API의 차단 스타일에 아무런 문제가 없습니다 하지만 우리가 Android에서하고 싶은 것이 아닙니다 그래서, Yigit가 이미 이야기 한 것처럼, 우리는 일반적으로 콜백을 도입했습니다 그럼 어떻게 실행되는지 봅시다 우리는 여전히 메인 스레드에서 이것을 호출 할 것입니다

하지만 이제 fetchUser가 호출되면, 주 스레드는 자유롭게 다른 작업을 수행 할 수 있습니다 그것은 onDraw를 다루거나 사용자 접촉에 응답 할 수 있습니다 그리고 네트워킹 라이브러리는 실제로 요청을 실행하는 다른 스레드 결과가 준비되면 네트워크 라이브러리 내가 또 다른 콜백을 사용할 수있다 그것은 내 코드를 다시 호출하고 그것이 준비되었음을 알려주는 것입니다 정확히 같은 코드를 coroutines로 다시 작성해 보겠습니다

차단 스타일처럼 보입니다 fetchUser의 결과는 즉시 사용할 수 있습니다 콜백을 도입 할 필요가 없습니다 코 틀린에게 나는 코 루틴으로 이것을 실행하기를 원한다 이 함수에는 일시 중단 수정자가 있습니다

우리가 그것을 실행할 때 여전히 주 스레드에 있습니다 주 스레드는 콜백과 마찬가지로 차단 해제됩니다 그리고 이것은 coroutines의 핵심 개념입니다 네트워킹 요청은 여전히 ​​다른 스레드에서 실행됩니다 결과가 준비되면, 코 루틴을 다시 시작합니다 어디에서 멈췄다

이 코드는 콜백 스타일보다 훨씬 간단합니다 여전히 Android 앱을 작성할 수 있도록 보장합니다 사용자를 위해 동결하지 마십시오 이것은 코 루틴의 핵심 메커니즘입니다 일시 중지하고 다시 시작하십시오

코 루틴이 중지되면 실행되지 않습니다 일시 중지되었습니다 그리고 그것이 다시 시작될 때, 그것은 중단했던 곳에서부터 나아집니다 코 루틴을 콜백으로 일시 중지한다고 생각할 수 있습니다 나머지 기능들

그래서 당신은 그것을 함께 넣었습니다 일시 중지하고 다시 시작하십시오 콜백을 대체하십시오 우리는 심지어 그것을 시각화 할 수 있습니다 콜백 버전 및 코 루틴 버전 거의 똑같은 방식으로 실행됩니다

되돌아 가서 fetchUser를 살펴 보겠습니다 네트워크를 만드는 함수를 어떻게 호출 할 수 있습니까? 메인 스레드의 요청? 시작하려면 fetchUser를 만들어야합니다 또 다른 정지 기능 이것은 코 틀린에게 코 루틴과 함께 작동한다고 알려줍니다 그리고 내부에서 다른 정지 기능을 호출합니다

withContext를 호출합니다 우리는 그것을 dispatchersio에게 넘겨 줄 것이다 그 디스패처 확대, Kotlin 디폴트, IO 및 메인의 세 가지 디스패처를 제공합니다 그리고 그들은 다른 것들에 사용됩니다

CPU 집약적 인 작업에는 기본값을 사용해야합니다 100 가지 요소의 목록을 변형하는 것과 같은 것들, DiffUtil 호출 또는 사전 계산 텍스트 주 스레드에서 실행하기에는 너무 오래 걸리는 것이 있습니다 기본 발송자에서 실행해야합니다 IO는 네트워크를 차단하는 데 최적화 된 운영자입니다 디스크 IO

필요하면 언제든지 사용해야합니다 파일 쓰기와 같은 API를 차단하는 코드 작성 또는 소켓에서 읽는 중 그리고 메인 – 이것은 안드로이드의 주요 스레드입니다 그리고 놀랍게도, 그것은 우리의 추천입니다 응답으로 코 루틴을 시작할 수있는 적절한 장소 UI 이벤트

보통 코 루틴을 시작하기 때문에 메인 스레드에서 머무르다 간단한 조작을위한 추가 작업을 피할 것입니다 그런 다음 목록을 변형하거나 파일을 작성해야 할 때, coroutines를 사용하면 다른 Dispatcher 중 하나로 전환 할 수 있습니다 withContext를 사용하여 withContext는 전달한 블록을 실행합니다

운영자에게 말하십시오 여기이 블록은 디스패처에서 실행됩니다 네트워크 통화를 차단하는 것은 무료입니다 이를 통해 우리는 주요 안전 API를 제공 할 수 있습니다 당신은 단지 읽고 쓸 수있는 함수를 만들 수 있습니다

이 같은 네트워크에서 및 주 스레드에서 호출하십시오 Android에서 큰 이점입니다 이제는 모든 단일 기능에 대해 걱정할 필요가 없습니다 어떤 스레드가 실행될 필요가 있습니다 대신, 나는 단지 그것을 부를 수있다

기능 자체로 메인 쓰레드에서 호출하는 것이 안전하다는 것 코 루틴 소개를 끝내기 위해 Kotlin이 어떻게 구현하는지 살펴보십시오 모든 스레드에는 호출 스택이 있습니다 디버거 또는 스택 추적에서 볼 수 있습니다 Kotlin이 실행중인 기능을 추적하는 방법입니다

및 그 지역 변수 일시 중지 기능을 호출 할 때, Kotlin은 사실을 추적해야합니다 정규 함수 대신에 코 루틴을 실행합니다 이것을 서스펜션 마커로 나타낼 것입니다 서스펜드 마커 위에있는 모든 것은 코 루틴이됩니다

아래의 모든 것은 정규 기능입니다 그런 다음 Kotlin은 정상적인 기능처럼 loadUser를 호출합니다 스택 스택에 스택 항목을 넣을 것입니다 그리고 이것은 loadUser에 대한 지역 변수입니다 저장 될 것이다

그런 다음 발견 될 때까지 실행합니다 다른 일시 중단 함수 호출 이제 Kotlin은 일시 중지를 구현해야합니다 어떻게 그럴 수 있죠? 일단 당신이 그것을 이해하면 간단합니다 Kotlin이해야 할 일은 상태 복사입니다

함수를 스택에서 다음 위치로 옮긴다 그것은 나중에 저장할 수 있습니다 모든 중단 된 코 루틴을 여기에 넣을거야 스택과 같은 구조는 아닙니다 그런 다음 Kotlin은 실제로 fetchUser를 호출합니다

다른 스택 엔트리를 작성해, withContext를 호출하면 (자) 저것을 또한 중단한다 그래서이 시점에서 주 스레드의 모든 coroutine 일시 중지되었습니다 그리고 이것은 주 스레드가 onDraw 핸들과 같은 다른 작업을 수행 할 수 있습니다 또는 사용자 접촉에 응답 할 수 있습니다 그리고 이것은 정말로 중요합니다

스레드의 모든 coroutine이 일시 중단 된 경우, 스레드는 다른 작업을 수행 할 수 있습니다 우리가 몇 초 빨리 감기면, 네트워크 결과가 준비됩니다 그리고 코 틀린은 이력서에 전화해야합니다 그렇게하기 위해서는 저장 상태와 복사본 만 필요합니다 그것을 다시 스택에 놓고, 기능을 다시 시작합니다

loadUser를 다시 시작하면 계속해서 정상적으로 실행을 계속하십시오 loadUser가 오류가 발생하면 예외가 발생했습니다 바로 거기 중지 및 재개 메커니즘은 coroutines 뒤에있는 마법입니다 그리고 우리는 당신에게 그것을 보여주고 싶었습니다

그들이 당신처럼 일하는 방식을 이해할 수 있습니다 코드에서 사용하기 시작하십시오 그것은 coroutines 소개를 감쌌다 안드로이드의 코 루틴은 우리에게 능력을 제공합니다 콜백을 대체하여 코드를 단순화하는 방법 우리가 주요 안전을 만들어 보장 할 수 있도록 우리는 주 스레드를 차단하지 않습니다

이제 세르게이에게 넘겨 줄거야 누가 오늘 사용할 수있는 도서관에 대해 조금 이야기 할 것인가? coroutines와 함께 고마워, 션 그래, 그 스레드는 [INAUDIBLE],하지만 우리는 정말로 우리의 실제 적용에 도움이되고 싶습니다 그리고 매우 어린 코 루틴에도 불구하고, 이미 그들을 지원하는 도서관이있다

그들의 안정된 또는 더 나은 유물에서 WorkManager로 시작하겠습니다 AndroidX에서 우리에게 새로운 브랜드입니다 이미 안정적인 릴리스에서 코 루틴을 지원합니다 그리고 코 루틴 작업에도 사용할 수 있습니다

그러나 한 발 뒤로 물러나서 알아 내려고합시다 왜 그렇게하는지, 우리는 그것을 사용합니다 그래서 이것은 전형적인 노동자들의 흐름입니다 따라서 WorkManager에 익숙하지 않은 경우, 당신은 일종의 노동자라고 생각할 수 있습니다 그 긴 배경 직업 않습니다

몇 가지 제약이있을 수 있지만 매우 간단합니다 그냥 약간의 일 그 전형적인 유스 케이스, 당신은 일부 로컬 데이터를 웹 서버와 동기화해야합니다 그리고이 흐름이 너처럼 보일거야 데이터베이스에서 새 노드를 쿼리하고, 그런 다음 서버에 업로드하십시오

마지막으로, 해당 노드를 성공적으로 동기화 된 것으로 표시합니다 콜 루틴은 필요 없습니다 음, 실제로, 우리는 취소에 대해 이야기하기 시작하지 않았습니다 취소 사유는 여러 가지 이유로 발생할 수 있습니다 예를 들어이 작업자에 대한 제약 조건은 더 이상 충족되지 않습니다

UI를 제공 한 경우 사용자가이 작업을 명시 적으로 취소합니다 그러면 취소를 어떻게 지원할 수 있습니까? 음, 그런 식으로하려고 할 수 있습니다 ifCheck를 사용하여 다른 모든 줄을 넣으려고합니다 어리석은 것을보기 시작합니다 더군다나 실제로는 그렇지 않습니다

이 전화는 아마도 가장 비싼 전화 일 것입니다 네트워크에 연결되어 일부 작업을 수행하기 때문에, 취소 신호 전파가 없으므로, 그것이 시작 되었다면 무엇이든 상관없이 끝까지 달려 가라 그리고 이것은 실제로 노동자로 하여금 우리를 도울 것입니다 우리는 아직 그것에 대해 말하지 않았지만, 코 루틴은 콜백을 멋지게 잡아라 또한 좋은 cancellation 속성을 제공합니다

따라서 모든 일시 중지 기능을 취소 할 수 있습니다 이 취소에 대응할 수 있습니다 또한, 모든 내부 호출을 전파합니다 이 취소 신호 이러한 호출 내부의 코드가 여전히 차단되고 있다고 말할 수 있습니다

우리는 어쨌든 그로부터 이익을 얻지 못합니다 이것은 사실입니다 그러나 Room을 데이터베이스 솔루션으로 사용하는 경우, 쿼리를 일시 중지 기능으로 표시 할 수 있습니다 그리고 Room이 취소를 처리합니다 Sean이 여러 번 언급 한 것처럼 실을 꿰는 것뿐만 아니라, 이 일은 안전 할 것입니다

방은 스레딩을 처리합니다 그것은 배경 스레드에서 쿼리를 실행합니다 그럼, 우리 데이터베이스 호출은 지금 취소 할 수 있습니다 그러나 우리가 전에 논의한 것처럼, 주요 호출은 이것입니다 실제로 Retrofit을 사용하는 경우, Retrofit 이미 벌금을 부과 했으므로 일시 중지 할 수도 있습니다

네트워크 호출에 대한 일시 중지 식별자를 지원합니다 Retrofit을 강조하고 싶습니다 AndroidX에 포함되어 있지 않습니다 Android에서 설계된 자바입니다 다음에 Android를 사용하면 Android [INAUDIBLE]이 (가) 포용합니다

coroutines, 우리는 그것을 좋아한다 하루가 끝나면 우리에게는 일이 적습니다 좋은 이제이 코드는 취소를 지원합니다 그리고 이전처럼 쉽게 보입니다

그래서 우리는 무료로 취소를 받았습니다 그래서 이것들은 물건들에 대한 빠른 견해였습니다 오늘 이용 가능했습니다 그리고 Yigit은 우리가 방금 만든 많은 새로운 사람들을 당신에게 선물 할 것입니다 BOIGAR : 감사합니다, Sergey

그래서, 지금까지 우리는 코 루틴으로 할 수있는 것에 대해 이야기했습니다 그리고이 이야기의 나머지 부분을 위해, 우리는 새로운 것을 이야기 할 것입니다 그래서 첫 번째는 LiveData와 coroutines입니다 이제 매우 명확 해지기 위해 LiveData 동시성을 위해 설계되지 않았습니다 그것은 관찰 가능한 가치 보유자입니다

그리고 너는 접근 할 수있을 것으로 예상된다 메인 thread로부터의 값 그건 의도적 인거야 그러나 그것이 상호 운용 될 수 없다는 것을 의미하지는 않습니다 그래서 이것이 우리가 오늘 당신에게 제공 할 것입니다 coroutines와 함께 LiveData를 사용하는 쉬운 방법이있을 것입니다

따라서 가장 보편적 인 사용 사례는 가치가 있다는 것입니다 당신은 코 루틴에서 계산하기를 원합니다 결과를 LiveData로 제공하려고합니다 오늘 라이프 사이클 22 알파 01 유물로 시작하여, 이 새로운 API 인 LiveData를 얻습니다

따라서 시퀀스와 매우 유사한 빌더 함수입니다 Kotlin의 건축업자 그 안에 coroutines 블록을 전달합니다 그리고 안으로, 당신은 당신이 원하고 전화를 할 수 있습니다 이 함수는 값을 전달하는 함수를 내 보냅니다

따라서이 데이터베이스로드 기능을 보면, HLS [INAUDIBLE] 기능입니다 이 경우 사용자가 emit을 호출하기 때문에, 우리는 당신을 위해 그 타입을 추론 할 수 있습니다 이것을 지정해야합니다 따라서이 간단한 LiveData API 귀하의 LiveData 요소들 사이의 간격을 연결합니다 그리고 당신의 coroutines

이제 API에 대해 좀 더 자세히 살펴 보겠습니다 이것이 세 가지 매개 변수입니다 그리고 첫 번째 문맥입니다 그렇다면 우리는 왜 문맥이 필요한가? 이 데이터가 loadUser 함수라면, [INAUDIBLE] 기능은 일반적인 기능 이었지만, 이 코드를 작성하면 주 스레드 예외에 대한 IO를 수신하려면, 이 블록은 기본적으로이 그림의 메인에 그려지기 때문입니다 그러나 우리는 그것을 바꿀 수 있습니다

이 사진의 입출력과 같이 상황을 알릴 수 있습니다 이제이 코드는 완벽하게 작동합니다 너 한테 내가 변하지 않았 음을 알아줬으면한다 코드의 모든 내용 당신이 원하는 어떤 디스패처에서든지 내보낼 수 있습니다 값을 변경하기 위해 기본 Dispatcher에있을 필요는 없습니다

이제 두 번째 방법은 정말 어색한 매개 변수입니다 timeout이라고 불린다 시간 초과 매개 변수가 필요한 이유를 이해하려면 Android의 악명 높은 회전 문제를 살펴 보겠습니다 그래서 왼쪽에는 LiveData를 제공하는 ViewModel이 있습니다 그리고 오른쪽에는 활동 디스크가 있습니다

그래서 내 활동이 시작된 상태로가는 동안, LiveData가 활성화됩니다 확인을 의미합니다 사용자가 볼 수있는 관찰자입니다 일부 값을 만드는 것이 더 좋습니다 그러나 그 시간 동안 우리의 활동이 어떻게 변화합니까? 그래서 그것은 멈추게 될 것입니다

LiveData는 비활성 상태가되거나 파괴되거나, 새로운 활동이 올 것입니다 지금 당장은 LiveData를 관찰하는 사람이 없습니다 그래서 결과를 낼 이유가 없습니다 새로운 것을 다시 시작하는 것을 제외하고는, 다시 활성화됩니다 여기서 우리가 풀려고하는 문제는 이 차이는 LiveData 동안 신속하게 매우 빠르게 연속적으로 비활성화되고 활성화됩니다

보통 1 초 미만 어떻게 해결할 수 있을까요? 코드 블록을 어떻게 실행하는지 자세히 살펴 보겠습니다 더 잘 이해하기 위해 그냥 타이머 기능을 작성하려고합니다 기본적으로 LiveData 용 타이머를 만듭니다 현재 시간을 가져오고, LiveData 빌더를 반환하며, 그리고 무한 루프에서, 그것은 단지 방출한다

시간, 1 초 지연, 시간 방출, 지연 1 초, 결코 끝나지 않습니다 그리고 내가 보여주고있는이 코드는 100 % 쓸 수 있습니다 실제로 어떻게 작동합니까? 이 블록에 의해 반환 된 LiveData가 활성화되면, 우리는이 블록을 실행했는지 확인합니다 그리고 우리가 그 블록을 실행하지 않으면, 이제 실행을 시작합니다 우리가 그것을 실행하는 동안, 그 블록이 비활성화되면, LiveData가 비활성 상태가되면, OK,이 블록이 아직 실행 중입니다

그리고 아직 실행중인 경우 완료 할 시간을줍니다 그러나 타임 아웃 후에도 여전히 실행중인 경우 우리는 기본적으로 비활성 상태입니다 불필요한 계산입니다 LiveData를 관찰하는 사람은 아무도 없습니다 그러나 보드는 계속 달리고있다

그래서 우리는 단지 그 연속을 취소합니다 코 루틴 따라서 LiveData가 다시 활성화되면, 우리는 단지 그것을 재시작 할 것입니다 당신은 한번만 할 수 있습니다 그래서 완료되면, 거기 다시 시작할 이유가 없습니다

이제 하나 이상의 값을 방출 할 수 있습니다 이제 우리가 가지고 있던 샘플 주위에 구조를 만들자 getUser가있는 저장소가있는 곳 함수, loadUser 함수 및로드 해당 값을 내 보냅니다 자, 대부분의 경우, 이것은 작성한 코드가 아닙니다 웹 서비스로 이동하여 업데이트 된 사용자를 가져와야합니다

데이터베이스를 업데이트하고 해당 값을 다시 내 보냅니다 그래서 emit을 여러 번 호출 할 수 있습니다 당신이 그 격리 구역에있는 한 당신이 원하는대로 그러나 당신은 말할지도 모른다 음, 대부분의 경우 데이터베이스는 그렇지 않다

귀하의 사용자를 반환, 그것은 당신을 위해 LiveData를 반환 사용자, 당신이 변화에 대해 통보 받기를 원하기 때문입니다 글쎄, 여러분이 말할 수있는 것은 emit 소스를 호출 할 수 있다는 것입니다 MediatorLiveData를 사용하신다면, 이것은 emitSource와 매우 비슷합니다 LiveData에서 가져온 값이 무엇이든간에 그냥 내 가치로 만드십시오 변형과 같은 것을 실행할 수 있습니다

아, 우리도이 여분의 방출을 필요로하지 않습니다 우리가 이미 데이터베이스를 관찰하고 있기 때문에, 그래서 당신은 그것을 제거 할 수 있습니다 따라서이 LiveData API는 기본적으로 우리에게 제공합니다 coroutines와 함께 LiveData를 작동시키는 아주 좋은 방법입니다 하지만 ViewModels은 어떻습니까? SEAN MCQUILLAN : 고마워요, Yigit

코 루틴을 통합하는 방법에 대해 조금 이야기 해 봅시다 귀하의 ViewModel에 하지만, 우선 누출에 대해 조금 이야기하고 싶습니다 특히 코 루틴 누출 그리고 이것들은 매우 심각한 문제입니다

그들은 일종의 메모리 누출과 같아요 우리 모두가 잘 알고 있지만 더 나 빠졌다 코 루틴은 다시 시작될 수 있습니다 또한 메모리를 사용하는 것 외에도 CPU를 사용할 수 있습니다 파일을 쓸 수 있습니다

그것은 일어날 필요가없는 네트워크 요구를 만들 수 있습니다 코 루틴 누출 문제를 해결할 수 있도록, 코 틀린 (Kotlin)은 코 루틴 범위에 대한 아이디어를 소개했습니다 그렇다면 범위는 무엇입니까? 글쎄, 그것은 실제로 트랙을 유지하는 단지 방법이다 당신의 coroutines의 모든 코 루틴은 범위에서 실행해야합니다

그리고 범위는 모든 것을 취소 할 수있는 능력을 얻습니다 그것 안의 coroutines의 또한, 그들은 또한 장소입니다 코 루틴에서 잡히지 않은 예외가 섞여 버릴 수 있습니다 너는 그걸 모두 모으고 너는 범위를 사용하면 코 루틴을 누출하지 않도록 할 수 있습니다

Sergey가 말한 WorkManager는 범위를 제공합니다 Yigit이 방금 이야기 한 LiveData Builder도 마찬가지입니다 viewModelScope는 범위입니다 ViewModel의 KTX 라이브러리에서 멸종 속성입니다 나는 그 무서운 무한 루프의 다른 하나를 할 것이다

Yigit가 보여준 것들,하지만 이번에는 코 루틴에서 나는 ViewModel에서 시작한다 viewModelScope을 사용하여 스코프에 코 루틴을 시작합니다 그리고 기본적으로 이것은 메인에서 시작됩니다 그런 다음 무한 루프를 시작합니다

그 자체를 멈추는 법을 알아라 그리고 매 초마다 파일을 씁니다 이제 꽤 비쌉니다 코 루틴은 파일을 더 빨리 또는 더 빨리 작성하지 않으며, 우리는 분명히이 작업을 누설하고 싶지 않습니다 ViewModelScope를 사용하면 이와 같은 코드를 안전하게 작성할 수 있습니다

사용자가 화면에서 벗어날 때, 범위가 취소됩니다 이 매우 값 비싼 작업이 누출되지 않도록 보장합니다 따라서 viewModelScope는 코 루틴 누출을 방지 할 수 있습니다 모든 코 루틴을 보장함으로써 사용자가 화면을 떠날 때마다 취소됩니다 나는 세르게이에게 넘겨 줄거야

누가 우리가 추가하고있는 다른 영역에 대해서 이야기 할 것인가 세이지 바실리 네크 : 그래, 고마워, 션 네 자연스럽게 제공되는 또 다른 기능 범위는 라이프 사이클입니다 그 이름에서 시작과 끝이있는 것을 볼 수 있습니다

그리고 네가 생각한다면, 네, 그건이 수명주기에 익숙합니다 소유자 인터페이스, 당신은 실제로, 그것은 당신의 활동이기 때문입니다 그것은 당신의 단편입니다 그 단편을 편리하게 잊지 마라 두 개의 다른 라이프 사이클이 있습니다

그리고 두 번째 것은 – 우리는 그것의 내부를 사용합니다 불행히도, 저를 위해서, 저는 이제 그것에 대해 이야기해야합니다 그러나 거기에서 더 정확한 범위를 정의합시다 아시다시피, 당신의 단편은 다시 만들어집니다 구성 변경 사항 이상

따라서 수명이 더 짧아 질 수 있습니다 더 길 수 있습니다 그리고 lifecycleScope은 단지 그것을 반영합니다 라이프 사이클 소유자가 파괴 이벤트를 받으면, lifecycleScope가 취소됩니다 그리고 모든 내부 업무 또한 취소됩니다

따라서 알 수 있듯이 lifecycleScope UI와 매우 밀접하게 결합되어 있습니다 그리고 그것은 그런 상황에서 가장 잘 작동합니다 그래서 이전에, 당신은 뭔가를 할 것입니다 당신이 지연된 UI를 보여 주기로 결정했을 때 이런 식으로 그리고 이것은 꽤 간단 해 보입니다

그래서 우리는 조금 더 어렵게 만들 수 있습니다 두 단계가 있다면 이 심오함 때문에 아주 못 생겨 보입니다 그리고 실제로, 당신이 면밀한 관찰을 가지고가는 경우에, 이 mainHandler 때문에 실제 문제가 있습니다 그리고 UI에 닿는 기능은 실제로는 그렇지 않습니다 mainHandler가 함께하기 때문에 잘 작동합니다

GlobalScope의 일종입니다 라이프 사이클을 전혀 신경 쓰지 않습니다 그리고 그 함수들은 참조를 가지고 있습니다 파편이나 활동에 지연이 충분히 길다면 쉽게 많은 것들을 누출시킬 수 있고 그들로부터받을 수있다

그들의 예외 lifecycleScope는 이러한 코덱을 취소하지만, 그들은 우리에게 showFullHint입니다 일시 중지 기능이기 때문에 일종의 콜백입니다 [INAUDIBLE]에서 취소 할 것입니다 일단 당신의 라이프 사이클이 파괴되면

따라서 매우 순차적이기 때문에이 코드는 멋지게 보입니다 그리고 실제로 더 안전합니다 그러나 나는 lifecycleScope 약간의 위험 지대입니다 그러니 조금 되감습니다 나는 당신에게 개조 및 룸 지원을 보여준 사람이었습니다

일시 중단 기능 Yigit는 당신에게 뭔가를 보여 줬어 – 아주 친숙한 – 그런 것 같습니다 당신이 말할 때, 좋아, 나는 그 기능들을 결합 할 것이다 네트워크 및 데이터베이스에 대한 일부 저장소 패턴, 이제는 단 하나의 기능 만 사용할 수 있습니다 이 모든 작업을 조정하는 일시 중지 기능입니다

그래서 나는 그것을 호출하는 범위가 필요합니다 그렇다면 왜 내 수명주기에 그것을 부르지 않았을까요? 그것은 실제로 가장 밝은 아이디어는 아니지만 왜? 그리고 저를 잘못 이해하지 마십시오 Yigit와 Sean이 당신에게 모든 것을 올바르게 팔았습니다 주 스레드를 잠그지 않습니다

[INAUDIBLE]이 (가) 누출되지 않습니다 그러나, 당신은이 그림을 기억합니까? lifecycleScope가 취소되고 모든 구성이 변경됩니다 네트워크 요청이 발생 함을 의미합니다 매번 취소되므로 낭비가됩니다 사용자 자원과 리소스를 낭비하고 있습니다

환경에 좋지 않습니다 어떻게 제대로 할 수 있을지 음, 사실 중 하나가 Yigit에 의해 제시되었습니다 이 LiveData 빌더는 매우 잘 작동합니다 이런 상황에서

나는 당신에게 어떻게 접근 할 수 있는지 당신에게 보여줄 것입니다 이런 종류의 작업을위한 출발점 ViewModel 스코프입니다 따라서이 loadNote 함수를 실행하면됩니다 이 ViewModel 스코프 그런 다음 ViewModel에 함수를 도입했습니다 노트를 가져올 때 ViewModel에서 UI를 연결합니다

글쎄, 우리가 논의한 것처럼, 그것은 어딘가에있는 네트워크 호출입니다 의 loadNote 그래서 이것은 동기식 동작입니다 그래서 그것은 중단되어야합니다 그리고 이제는이 노드를 어떻게 든 연결해야합니다

하나의 범위에로드됩니다 그리고 loadNote 함수는 다른 범위에서 호출됩니다 글쎄, 나는 CompletableDeferred를 사용할 것이다 글쎄, 약간 무서운 것 같지만 실제로는 아주 간단한 것 잠시 후에보실 수 있습니다

우리가 어떻게 사용하는지 – 우리는 우리가 적재 한 메모와 함께 연기를 완료한다 그것은 단지이 오브젝트에 노트를 넣었습니다 아무 반응이 없습니다 그리고 독자는 무게 기능을 가진 주를 요구합니다 이걸 연기 했어 메모가 아직 준비되지 않은 경우 리더가 일시 중지됩니다

준비가되면 리더가 즉시 재개됩니다 이것이 우리가 ViewModel을 구현 한 방법입니다 그리고 마지막 단계에서 우리는 라이프 사이클 범위에서이를 호출합니다 ViewModel에서 소개 한이 loadNote 함수 그리고 우리의 네트워크 호출은 ViewModel에서 제대로 실행됩니다

범위이므로 구성 변경의 영향을받지 않습니다 그리고 우리의 업데이트 UI 기능은 수명주기 소유자가 파손되면 유출됩니다 그러나 일단 그림에 조각을 추가하면, 상황은 언제나처럼 복잡해집니다 그래서 우리는 조각 트랜잭션을 실행하기로 결정했습니다 그리고 합법적 인 주 예외를 받게됩니다

아무것도 보증하지 않기 때문에 조각을 실행할 수있는 올바른 상태에 있습니다 업무 그리고 우리는 뭔가 똑똑하고 도입했습니다 거래를 돕는 몇 가지 특수 기능 이런 종류의 상황들 그리고 이것은 약간 까다로울 것입니다

실제로는 상당히 복잡한 것 하지만 무슨 일을하는지,이 블록은 응용 프로그램이 시작되거나 다시 시작될 때, 그것이 전경에 있다는 것을 의미합니다 그리고이 블록은 귀하의 라이프 사이클이 막 생성되었습니다 자, 실제로 어떻게되는지에 대한 예를 살펴 보겠습니다 방법

그래서 당신은이 기능을 가지고 있습니다 아마도 처음에 불려집니다 메모가 준비되지 않았기 때문에 블록이 일시 중지됩니다 그런 다음, 일단 이것이 준비되면, 보통의 상황에서, 우리는 실행을 재개하고 다음 줄로 진행할 것입니다 그러나 launchWhenStarted 기능으로, 우리는 가서 라이프 사이클을 점검 할 것입니다

시작되지 않으면 Google은 수명주기가 끝날 때까지 다시 시작된다 일단 시작되면 우리는 다음 라인으로 진행 이 트랜잭션을 쉽게 실행할 수 있습니다 그래서 우리는이 예외적 인 상황에 처하지 않을 것입니다 그래서이 블록을 강조하고 싶습니다 생성 중에 일시 중지되었습니다

그리고 취소 된 것과는 다른 것입니다 lifecycleScope에 의해 취소가 여전히 제공되기 때문에 destroyEvent가 발생했습니다 그리고 지금, 당신이 볼 수 있듯이, 그것은 무언가입니다 우리가 시험 할 필요가있는 부분은 Sean이 도와 줄 것입니다 SEAN MCQUILLAN : 고마워요, Sergey

오늘 우리는 코 루틴에 대해 많은 이야기를 나눴습니다 API를 정리하는 방법에 대해 이야기했습니다 콜백을 대체하여 일시 중지했다가 다시 시작합니다 우리는 그들이 할 수있는 다양한 방법에 대해 이야기했습니다 다른 상황에서 사용됩니다

그리고 모든 것이 훌륭합니다 정말 끝내주는 군 그러나 그들이 시험하기가 어렵다면, 그저 비 스타터 일뿐입니다 그건 내가 진지하게 받아 들일만한 것이 아닐거야 사용할 물건으로

그래서 내가 너에게 옳은 얘기를하고 싶다 지금 Kotlinx-coroutines-test입니다 1 주일 반 전에 나왔던 새로운 도서관입니다 현재 실험용 coroutines API로 표시되어 있습니다 그것이하기 전에 더 많은 피드백이 필요하기 때문에 안정된 곳까지

Google과 JetBrain의 공동 작업입니다 안드로이드에서 coroutines를 테스트하는 것을 아주 쉽게 만들어줍니다 따라서 모든 테스트 라이브러리와 결합되지 않습니다 따라서 JUnit 4를 사용할 수 있습니다 JUnit 5를 사용할 수 있습니다

사용자가 작성한 사용자 정의 테스트 러너를 사용할 수 있습니다 그리고이 라이브러리는 코 루틴을 테스트하는 데 도움이 될 것입니다 그래서 저는 LiveData Builder에 집중할 것입니다 Yigit는 보여 주었다 그리고 우리는 그것을위한 테스트를 작성하는 방법에 대해 이야기 할 것입니다

그래서 나는 하나를 방출 할 것입니다 나는 잠깐 기다릴거야 그리고 나서 두 개를 방출 할 것입니다 이것은 비교적 간단한 LiveData입니다 그래서 나는 그것에 대한 테스트를 작성하는 방법에 집중할 수 있습니다

시작하려면 주 디스패처를 조롱해야합니다 LiveData Builder는 dispatchersmain을 사용합니다 기본적으로 Android의 실제 주 스레드입니다 테스트 코 루틴 디스패처로 대체 할 수 있습니다

특수 설계된 디스패처입니다 coroutines 테스트 그리고 우리는 테스트 코 루틴 범위를 만들 수 있습니다 이것은 코 루틴 테스트를위한 범위입니다 그러면 설치 프로그램에서 dispatchers

main을 전환 할 수 있습니다 테스트 발송자를위한 것입니다 dispatchersmain의 전역 값이 변경됩니다 즉시 LiveData Builder 우리가 제공 한 발송자를 사용할 것입니다

그런 다음 tearDown에서 resetMain을 기본값으로 설정하십시오 그리고 마지막 줄은 여기에 있습니다 정말로, 정말로 중요합니다 그것은 testScopecleanupTestCoroutines를 말합니다

운영자와 범위에 대해 생각하는 경우 하고있어, 그들은 매우 안정적이야, 맞지? 그들은 당신의 코 루틴을 추적해야합니다 실제로 실행합니다 이것을 부르지 않으면 매우 쉽습니다 검사 사이에 상태가 누출 될 수 있습니다 그래서 그것은 많은 상용구입니다

그래서 당신은 계속해서 함께 할 수 있습니다 어쩌면 JUnit 4 규칙 일 수도 있습니다 이것은 도서관에 없지만, 그러나 모든 코드를 규칙에 작성할 수 있습니다 그리고 저는 도서관을 볼 것으로 기대합니다 이것은 상대적으로 짧습니다

따라서 어떤 테스트 프레임 워크를 사용하든, 그러나 추상화를 구축해야합니다 그것은 당신의 테스트 프레임 워크에 적합합니다 그 코드를 할 수 있습니다 여기서 정의하는 규칙은 testCoroutineScope 인터페이스 runBlockingTest를 호출 할 수있게 해줍니다

이것은 테스트를 위해 최적화 된 코 루틴 빌더입니다 그것은 일종의 runBlocking처럼 작동합니다 그러나 그것은 많은 테스트를 쉽게 작성하게 만듭니다 오, 그러면 단위가 반환되므로 단일 표현으로 사용할 수 있습니다 스타일을 테스트합니다

그런 다음 주제를 얻습니다 그런 다음 LiveData 관찰을 시작해야합니다 그래서 실행됩니다 LiveData Builder가 실행되지 않는다는 것을 기억하십시오 누군가 그것을 관찰 할 때까지

observeForTesting이라는 작은 테스트 도우미를 정의 할 것입니다 이것은 내 테스트 코드 일 뿐이다 도서관 어디에도 없습니다 옵서버를 시작하려고합니다 내가 통과 한 블록을 호출하십시오

그리고 다시 시험에 첫 번째 값은 이미 방출되었습니다 이 테스트로 모든 것을 결정적으로 만들었 기 때문에 내가 사용하고있는 규칙 나는 [INAUDIBLE] 주장을 사용할 것이다 값이 1과 같아야하는지 확인하려면, 그리고 나서 나는 1 초씩 시간을 앞당길 것입니다

이것은 큰 장점 중 하나입니다 testCoroutineDispatcher의 가상 시간을 제어 할 수 있습니다 따라서 advancedTimeBy는 지연을 발생시킵니다 즉시 돌아온다 그리고 나는 내 시험에서 그것을 제어 할 수 있습니다

따라서 두 번째 방출은 이미 이 코드 줄을 읽었습니다 회전하고 결과를 기다릴 필요가 없습니다 그리고이 시험은 벗겨지지 않을 것입니다 나는 단지 제목을 말할 수 있습니다 값은 2와 같아야합니다

테스트를 통과하면 테스트를 통과합니다 테스트는 1 초가 아닌 즉시 실행됩니다 라이브러리를 확인해보십시오 당신이 찾은 버그는 반드시 제출하십시오 현재 실험중인 coroutines API로 표시되었습니다

그것이 안정을 높이기에 충분한 피드백을 가질 때까지 그리고 지금, 나는 마이크를 돌려 주겠다 이야기를 중단하기 위해 Yigit에게 BOYAR : 고마워, 션 좋아요,이게 너무 많아요

다음은 무엇입니까 그래서 오늘 우리는 당신이 어떻게 할 수 있는지 당신과 이야기합니다 AndroidX 및 기타 Android 라이브러리에서 동시 루틴을 사용하십시오 우리는 새로운 LiveData Builder를 도입했습니다 이를 통해 실제 데이터를 coroutines와 통합 할 수 있습니다

그리고 뷰 모델에 대한 새로운 라이프 사이클 기술 당신의 뷰 모델과 당신의 삶을위한 코 루틴 스코프 사이클 그런 다음이 새로운 기능을 도입했습니다 우리는 coroutines를 실행할 수있는 시작했다 귀하의 라이프 사이클 상태를 기반으로합니다

마지막으로 우리는 새로운 테스트를 도입했습니다 coroutines 용 라이브러리 그래서 오늘 일찍 우리는 코 틀린을 먼저 발표했습니다, Android 용 [INAUDIBLE] 및 Jetpack 용 그것은 coroutines보다 먼저입니다 이것은 권장 사항입니다 우리는 coroutines이 최상의 기능을 제공한다고 믿습니다

Android에서의 동시성 사용 용이성을 제공합니다 그러나 우리는 이것이 진행중인 작업임을 인정합니다 우리가 보여준 대부분의 도서관 실험적이거나 알파 하나, 우리는 지역 사회와 함께 이것을 발전시키고 자한다 건축 회사와 같은 방식으로 및 다른 Jetpack 라이브러리 그래서 우리와 함께하거나 6 개월을 기다릴 수 있습니다

그런 다음 사용을 시작하십시오 그리고이 일환으로 Kotlin이 점점 더 많이 보일 것입니다 제트 팩에서 나오는 코 루틴 따라서 이들 모두는 라이프 사이클 20에서 사용할 수 있습니다

01부터 오늘 시작하십시오 한번보세요 당신이 그것에 대해 어떻게 느끼는지 알려주십시오 또한 우리는 실제로 코 루틴을 좋아합니다 고맙습니다

[음악 재생]

【ibisPaint】I bought a pen tablet for Android!!

안녕 여러분, Misa입니다~ 제가 아마존에서 뭔가를 샀는데요 바로 이겁니다! 펜 타블렛!!!! 잠깐 거기 당신! 이건 ibisPaint랑 관련없잖아! 라고 말하는게 들리네요 영상 닫지 말아주세요! 이 영상은 압력감지를 사용하는 안드로이드용 펜 타블렛을 소개하는 겁니다! 아직 시도 안해봤으니깐 같이 어떤 느낌인지 확인해보죠! 좋아요, 제품상자를 꺼냈습니다! 제품 모델명은 HUION HS64 가격은 39달러! 가격이 매우 합리적이네요 하지만 더 중요한 것은 사용하기 편하게 몇가지 부속품이 있다는것! 한번 열어보죠! 개봉!!! 정말 감사합니다! 이 얼마나 공손한 펜 타블렛인지!! 안에 무엇이 들어있는지 봅시다! 펜타블렛 무전원 펜 사이드 버튼도 단단하게 붙어있네요! 마이크로 USB 케이블 OTG 어뎁터 두개의 변환 어뎁터가 포함되어 있네요! 이쁘네요! USB C타입 USB 마이크로 타입 안드로이드 기기는 제가 지금까지도 사용중인 넥서스 6 입니다 마이크로 USB! 펜촉이 여기 안에 있었네요! 얼른 연결하도록 하죠! L모양의 선을 타블렛에 연결해줍니다 단단하게 연결해주세요! 다른 전환 어뎁터는 여기에 연결해주세요! 케이블이 연결됬네요! 그래서잘 작동할까요? 커서가 움직이네요! "+"를 눌러 새로운 켄버스를 가져오고, 바로 그려봅시다! 그리기 아주 편한데, 뭐라 해야할지 모르겠네요! 그리고 여러분들이 가장 관심이 있는게 뭔지 알것같네요 압력감지는 어디에 있는가?! 확인해봅시다! 화면의 도구 선택창에서, 설정을 열면

압력감지 사용!!! 대단하지 않나요?! 하!? 오!? 어!? 잠깐?! 대단해!! 그리기 편함과 동시에, 압력감지도 잘되네요! 39달러는 너무 싸네요! 앞으로 안드로이드에게 강한 아군이 되어주겠네요! 좋아, 다음! 압력감지에 대한 다른 유용한 기능이 있습니다! 예를 들자면 펜의 사이드 버튼! 이 버튼에 대해 설정에서 커스터마이징을 할수있답니다! 버튼1번은 낮은 버튼입니다(아랫부분) 이건 '되돌리기'가 사용되게 설정되어있네요 여기서 커스터마이징을 할수있어요! 버튼 1번을 클릭하면, 아주 간단하게 취소됩니다! 이 얼마나 편리한 기능인지! 평소대로 그려보겠습니다! 켄버스의 사이즈는 768 x 1024 ! 전 그림그릴때 화면을 터치하지않아서, 제 손에 방해받지않고 그리기 쉽네요! 그림그릴때 화면의 크기때문에 걱정할 필요도 없습니다! 만약 당신이 큰 화면의 안드로이드 타블렛을 가지고 있다면, PC와 펜 타블렛을 사용하는것과 같은 느낌을 받을수 있기 때문에, 당신이 안드로이드 펜 타블렛 유저라면, 전 이 제품을 진심으로 추천해요! 두손가락으로 확대와 축소, 그리고 회전이 편하기 때문에, 편안하게 작업할수 있습니다

정말 훌륭하네요! 저에게 상기기켜주네요 처음으로 펜 타블렛을 샀었을때 익숙해지는데 어려움을 겼었던게 기억이 나네요 제가 가장 많이 한 연습은 트레이싱! 계속 하다보면 익숙해질거예요! 언젠가 익숙해진다면, 정말 유용한 제품이기 때문에, 연습하는데에 아무런 문제가 안될겁니다! 끝! ☆

。:*☆。:*・゚ ☆。

:*추가적으로☆。:*・゚ ☆。:*☆

。:* 큰 안드로이드 타블렛으로 그려봅시다! 켄버스의 크기는 768 x 768 입니다 스마트폰으로도 쉽게 그릴수 있습니다만, 커다란 화면에서는 더 쉽게 조작할수 있습니다! 펜 타블렛 화면도 사용할수 있으니, 얼마나 훌륭한지요! pC보다 그리기 편하네요! 그리기 정말 재밌네요! 끝났습니다! 마지막으로, 몇몇개의 지원되지 않는 모델들이 있으니, 디바이스에서 작동이 할수 있는지 제조사를 확인해주세요 함께 확인해요! 봐주셔서 감사합니다! 아마존으로 떠나요!!

Android Q Beta 4 is Out! – What's New?

안녕하세요 ZolloTech 및 Android Q 베타 4에 대한 모든 애런은 현재 여기에 있습니다

개발자와 베타 테스터는 3 백 36 포인트 내 픽셀에 8 메가 바이트 세 XL 빌드 번호는 QPP4190502018입니다 이 특별한 빌드는 더 세련된 것입니다 OS 전반에 걸쳐 모든 종류의 작은 것들 중에서 가장 먼저 할 일은 픽셀 3a 및 3a Excel을 지원하므로 이러한 장치 중 하나를 사용할 수 있습니다 그것을 설치합니다 공식 안드로이드 베타에 대한 링크를 아래의 설명에서 첫 번째 변경 사항과 첫 번째 사항을 살펴 보겠습니다

api가 개발자를 염려하는 한 최종 결정입니다 개발자가 모든 일을 처리하기를 원한다면 좋을 것입니다 이제 최종 릴리즈 준비 이제 항상 켜져있는 디스플레이에도 약간의 변화가 있습니다 그래서 여기에 들어가면 노래를 시작하면 집이나 집에서 어떻게 생겼는지 보여 드리겠습니다 항상 켜져있는 화면으로 돌아가서이 기능을 켜면 이제 글꼴이 표시됩니다

시계가 조금 더 크고 또한 노래 이름이 여기에 있지만 그 다음에는 실제 아티스트와 함께 작은 음악 아이콘이 있습니다 날씨는 있지만 더 이상 날짜와 시간을 입력하지 않으면 내가 깨우면 여기서 잠금 해제 된 것을 볼 수 있습니다 현명한 잠금 장치로 이제는 일부 사람들에게 조금 다르게 보입니다 이것은 당신이 가지고 있어야하는지 모르는 사람들을위한 픽셀 존재를 보여주고 있습니다 설치되었거나 그렇지 않은 픽셀 싹이 있지만 조금 다른 경우도 있습니다

작은 자물쇠 아이콘이 이제는 맨 위에 있습니다 설정은 지금 fennec ation에 직면 해 있습니다 나는 9 ~ 5 가지를 찾을 수 없습니다 얼굴을 검색하면 얼굴이 보일 수도 있습니다 얼굴을 볼 수 없으므로 시도해 보았습니다

저를 위해 거기서 다만 아닙니다 그러나 몇몇 사람들을 위해 가정에 지금 있을지도 모른다 화면이 약간 다르므로 글꼴이 조금 보입니다 조금 더 굵게 그래서 만약 내가 픽셀 3a XL에 가서 3a는 안드로이드 9를 실행하지만 글꼴은 약간 다르다 베타 3과도 다르다 거기에서 정말로 거대한 그러나 그것은 또한 어둡게 모드가 약간의 비틀기를 가지고있는 것으로 바뀐다 당신이 어둠의 모드에 있다면 지금 내가 볼 수있는 작은 검색입니다 막대가 이제 어둡고 전원 버튼을 누른 경우 거기에 변화가뿐만 아니라이 명령 줄에서 활성화해야하지만이 몇 가지 카드와 관련이 있습니다

잠시 후에 그 카드를 보여 드리겠습니다 일반적으로 그것은 측면에 있지만 비상시에는 약간 똑같아 보입니다 더 어둡기 때문에 약간 변경되었지만 과감한 것은 없습니다 이제 우리는 우리가 들어 와서 선택할 수있는 몇 가지 작은 것들을 추가했습니다 배경 화면 미리보기 버튼이있어서 미리보기를 탭하면 지워집니다

당신은 더 나은 아이디어를 얻을 수 있도록 디스플레이에서 모든 것을 실제 배경 화면 바닥에 멋진 정보가있는 것처럼 보입니다 정말로 좋은 공유는 조금 비틀었다 그래서 만일 내가 크롬에 여기에 들어가면 그리고 나서 작은 점 세 개를 치고 나면이 점을 조금 나눕니다 우리가 복사 할 수 있도록 여기에 복사본이 있습니다 가장 많이 사용하는 앱과 함께 앱과 공유 한 사람 또는 물건 그 아래에있는 목록은 정말 멋지다

그리고 나서 그들은 또한 돌아왔다 상황 인식 회전 회전 잠금이있는 경우 내가 이것을 회전 시키면 회전하는 것을 알고 있지만 회전시키고 싶다면 작은 버튼을 치면 회전 할 것이고 여기서 수직으로 돌아갈 것입니다 초상화를 누른 다음 다시 칠하면 우리는 내가 언급 한 것을 지금 되돌릴 수있다 이전에 작은 힘 버튼으로 우리가 이것을 밀어 넣으면 다른 것입니다

왜냐하면 저는 명령 줄에서이 기능을 활성화하여 다른 응용 프로그램 및 / 또는 설정이 아닌 다른 옵션을 사용하여 여기로 들어가서 시스템 아래에 우리가 제스처와 제스처에 가면 나는 카드와 패스가있는 커맨드 라인이있는 이것은 신용 카드 패스 티켓 및 긴급 정보 보도 자료를 보여줍니다 이것을 보여줍니다 언론에 이것을 돌리면 전원 버튼을 누르고 있습니다 전에했던 것처럼 다른 것을해라 그래서 이것은 무언가이다 나중에 Google 결제를 위해 조금씩 변경 될 수 있습니다 지금은 더 많은 것을 볼 수있을 것입니다

여기서 Wi-Fi 아이콘이 조금 달라 보이는 것을 알 수 있습니다 신호가 낮을 때마다 다르다는 것을 쉽게 알 수 있지만 조금 있습니다 알림도 다르다면 왼쪽이나 오른쪽으로 스 와이프 할 수 있습니다 그들이 돌아 왔을 때 돌아와 방해하지 마라 그렇게 볼 수있다

알림 이제 어느 방향 으로든 스 와이프 할 수 있습니다 디스플레이에서 그냥 문지르면 상관 없어요 우리가 여기 들어갈 통보에 들어가면 다른 것입니다 앱과 알림, 그리고 알림이 표시됩니다 베타 4의 새로운 애니메이션에는 자동 알림도 있습니다

우선 순위 결정은 또한 행동과 응답을 제안하고 또한 우리는 알림 점 또는 그 알림 거품 지금이 표시를 보지 못했어요 지금은 네이티브이지만 지금은 개발자 옵션 이었으므로 베타 4를 주류로 삼고 있기 때문에 약간의 문제가 있습니다 다른 것은 또한 새로운 제스처가 있기 때문에 볼 수 있듯이 나는 뒤로 당기고있다 그 작은 화살은 조금 다르다 그리고 그것은 매우 빠르지 않다 솔직히 내가 여기로 돌아 가면 우리가 돌아갈 수 있다는 것을 알게 될거야

스 와이프 홈 및 스 와이프하여 다시 실제로 작동하지만 꽤 빠르지 만 물론 뒤로 버튼을 원한다면 꺼 버릴 수 있습니다 거기서 당신은 실제로 이러한 제스처를 켜야합니다 그래서 우리가 다시 가자 시스템에 이르기까지 개발자 옵션과 개발자 옵션에 따라 몇 가지 새로운 악센트 색상 그래서 나는이 밝은 파란색 색상을 볼 수 있도록 악센트 색상과 아래로 현재 나는 바다 악센트에 있어요 우리는 이제 계피를 가지고 있으므로 거기에 변화가있을 때까지 1 분이 걸립니다 공간 그리고 난초가 있습니다 그래서 몇 가지 새로운 색상 나는 종류의 바다 색 그래서 그들은 여기에있는 새로운 것들입니다

우리가 가면 잠을 말하고 잠을 자던 곳에서 여기에서 그들은 수면 시간을 변경하여 수면 시간을 변경 한 것을 볼 수 있습니다 수면 대신에 스크린 타임 아웃을하고, 그 후에 가정 설정에서 개요 및 모든 앱 목록에서 몇 가지 제안 사항을 삭제했습니다 더 이상 거기 있지는 않지만 모든 것이 더 세련되어 보인다 훨씬 더 많은 일이 진행되는 것은 우리가 이전에 가지고 있던 것의 정교한 것일뿐입니다 그것이 더 좋아지고 있고 더 좋아지는 것처럼 보인다 더 안정되어있는 것처럼 보인다

내가 베타 3을 사용해 본 적은 거의 나쁘지는 않지만 다시 당신이 버그와 물건들을 위험에 기꺼이하지 않는다면 나는 공개 버전이 나오면 나중에 나에게 알려줘 아래의 코멘트에서 생각해보십시오이 벽지를 링크 해 드리겠습니다 이미 가입하지 않았 으면 좋겠다 비디오는 항상 감사합니다

아론 다음에 보자

Cum instalam Android Auto

오늘의 프로젝트에서 우리는 설치 방법을 보게 될 것입니다 Android에서 실행되는 스마트 폰의 Android Auto 앱 일부 휴대 전화 앱을 사용하려면 직접 우리의 자동차 infoteinment에 자동차가 물론 안드로이드 애플 리케이션을 지원한다면 이 앱을 설치하는 방법이 표시됩니다

이 앱을이 국가에서 사용할 수 없다는 사실을 고려하여 일부 국가에서는 사용할 수 있지만이 국가에서는 사용할 수 없습니다 첫 번째 단계는 우리 차가이 앱을 지원하는지 확인하는 것입니다 Android Auto 우리는 Fords 최신 시스템을 사용하고 있으며 Android Auto를 지원합니다 Android Auto라고하는이 앱이 필요합니다 그리고 이것은 그것의 아이콘이다

우린 통신 케이블이 필요할거야 자동차와 전화 사이 이제 연결 후 Android 자동 실행을해야합니다 이제 앱을 다운로드 해 보겠습니다 Google Play 스토어로 이동 Android 자동 검색 우리는 앱이 Google 검색에 나타나지 않습니다 유사한 아이콘을 가진 앱을 찾아 보겠습니다

그러나 우리가 더 자세히 살펴 본다면, 그것들은 그렇지 않습니다 goolge에 의해 배포 됨 그 (것)들은 저희를 도울 것이다 그러나 불행하게도하지 않을 것이다 또한 검색 단어 근처에 Google을 입력하려고합니다 그러나 여전히 관심이없는 결과 이는 해당 국가에서 앱을 사용할 수 없기 때문입니다 우리는 스토어에서 찾을 수 없습니다 우리는이 상황을 돌아야 할 것입니다

우리는 터널 베어라는 앱을 사용할 것입니다 이것과 같은 앱이 더 많습니다 그러나 우리는 이것을 사용할 것입니다 이 앱은 IP를 숨김으로써 검색 위치를 숨길 수 있도록 도와줍니다 다른 나라에서 우리의 위치를 ​​시뮬레이션하십시오

설치 후 사용하기 위해 계정을 만들어야합니다 이미 계정이있는 경우 로그인하십시오 복잡하거나 숨겨진 것이 아무것도 없다 우리는 전에 그것을 사용했고, 아무 문제없이 우리에게 좋았다 우리는 화면에 표시되는 내용에 동의하고 클릭해야합니다

이 응용 프로그램은 미국에서 우리의 존재를 시뮬레이션합니다 이제 앱을 다시 다운로드하려고하면 우리가 미국에서 다운로드하려고하는 것처럼 보일거야 그 전에 우리는 더 중요한 일을해야합니다 Google 스토어에서 Cahe와 데이터를 삭제해야합니다 그것을하기 위해 설정으로 이동 한 다음 저장소로 이동 기타 앱 Google Play 스토어 검색 그런 다음 맑은 송곳을 클릭하십시오 명확한 데이터 예, 우리는 모든 것을 지우고 싶습니다

Google 스토어가 우리 나라에 있었던 이전 검색 데이터를 기억하는 것을 원하지 않습니다 또한 Google 스토어는 백그라운드에서 계속 실행 중이므로 강제 종료해야합니다 설정, 앱, Google 스토어에서 강제 종료 / 종료하여 앱 종료 우리의 경우 앱이 폐쇄되었습니다 그래서 우리는 다시 열 수 있습니다 검색된 앱을 다시 입력하십시오

android auto 이제 Google 확장 기능을 통해 앱을 찾을 수 있습니다 여기에서 우리는 Google이 사용하기 위해 이것을 배포했음을 알 수 있습니다 우리는 그것을 설치해야한다 우리는 달리기 위해 몇 가지 것에 동의해야합니다 매우 중요한 단계는 저장소의 데이터 및 메모리를 지우는 것입니다

모든 안드로이드 버전이 같은 장소에 이러한 설정을 가지고있는 것은 아닙니다 우리는 우리의 전화 및 안드로이드 버전에 대한 이러한 세부 정보를 Google에 지정할 수 있습니다 Google 스토어에서 해당 설정의 위치를 ​​찾습니다 우리 Moto G5에서했던 것과 같은 위치에서 그들을 찾지 못할 수도 있습니다 하지만 일단 데이터를 지우고 우리는 문제없이 응용 프로그램을 설치할 수 있습니다

그런 다음 차와 함께 사용하도록 설정하십시오 지금은 차에 달렸어 우리는 차와 함께 몇 가지 물건을 세워야 할 것입니다 우리는 앱으로 계약 및 설정을 마쳤습니다 우리가 차에 그것을 사용하게하기 위해 다시 한번 우리가 앱의 모든 필수 설정에 동의하지 않는다면 아마 작동하지 않을 것이다

마이크, 연락처 등을 사용할 권한을 요청하기 때문에 운전하는 동안 사용되는 모든 것 동의하지 않으면 액세스가 거부되어 작동하지 않습니다 설치된 앱이 Google 전화에도 표시되면 내가 말했듯이 이것은 아이콘이다

나는 그것을 여기에 옮겨 보았다 우리는 전화가 연결되면서, 차로 돌아온다 다시 우리는 더 많은 것들에 동의해야한다 우리는 그들에게 더 나아갈 것에 동의해야한다 이 마지막 개조가 완료되면 우리는 앱을 사용할 준비가되었습니다

자동차 정보 통신 화면에서 실행됩니다 이것은 매우 사용하기 쉽습니다, 여기에 우리는 그것을 사용하는 방법에 대한 몇 가지 팁을 가지고있다 우리는 마이크 버튼을 사용하여 "ok google"에 액세스합니다 우리의 경우에는 자동차 음성 명령 버튼으로 직접 액세스 할 수 있습니다 끝났어

이 정보를 유용하게 사용할 수 있기를 바랍니다 다음 시간까지, 모든 최선을 다하겠습니다

Maps Live: Map Padding in the Google Maps Android API v2

안녕하세요 Google 개발자의 에피소드에 오신 것을 환영합니다

살고 있다 저는 Google Maps Developer Relations 팀의 Sarah Maddox입니다 지도를 사용하는 방법을 보여 드리겠습니다 Google Maps Android API로 패딩 지도가있는 애플리케이션이 있다고 가정 해 보겠습니다

사이드 바를지도에 추가하려면 하지만지도 UI 컨트롤이나 Google을 숨기고 싶지는 않습니다 심벌 마크 추가하면 어떻게되는지 봅시다 지도 패딩을 추가하지 않고 사이드 바를 만듭니다 이 작은 데모 응용 프로그램에는 오른쪽에 사이드 바가 있습니다

그리고 내 위치 컨트롤 찾기를 볼 수 있습니다 오른쪽 상단에 있지만 사이드 바에 의해 가려져 있습니다 마찬가지로지도 확대 / 축소 컨트롤 오른쪽 하단에 있으며 완전히 숨겨져 있습니다 그래서이 응용 프로그램으로 내가 한 일은 padded라는 버튼을 추가합니다 그리고 내가 덧대는 단추를 만지면, 응용 프로그램은 다음과 같은 메소드를 호출합니다

지도의 오른쪽에 30 픽셀의지도 패딩을 추가합니다 이제 UI 컨트롤이 멋지게 보입니다 내 사이드 ​​바 왼쪽에 약간 표시됩니다 지도는 여전히 전체보기를 사용합니다 그러나 사용자 컨트롤과 제스처 그들이 단지 사용하지 않는 것처럼 행동한다

지도의 더 작고 눈에 보이는 부분 그래서 내 위치 찾기 찾기를 탭할 것입니다 그리고 당신은 작은 파란색 위치 표시기가지도의 중심에 잘 배치되어 있습니다 지도 패딩을 고려했습니다 이제 정상적인 버튼을 누르면 내지도에서지도 패딩을 제거한 다음 내 위치 버튼을 다시 찾으십시오

위치 표시기가 약간 움직 였는지 확인하십시오 오른쪽으로 가면 중심에서 벗어난 것처럼 보입니다 전체지도를 고려하고 있기 때문입니다 보이는 부분 대신에 좋아, 나는 시드니를 만지고 위치를 잡을거야

호주 수학의 중심 그래서 주위에 멋진 푸른 바다가 많이 있습니다 그러면 Google 로고를 볼 수 있습니다 화면 왼쪽 하단에 있습니다 이제는 애플리케이션 요구 사항에 주목할 가치가 있습니다 Google 로고를 표시합니다

Google 로고가 숨겨져 있다면 Google지도의 서비스 약관을 준수하지 않음 아피스 따라서 UI 컨트롤을 왼쪽 하단에 추가해야하는 경우 맵의 패딩은 좋은 방법입니다 Google 로고가 나타나는지 확인하십시오 자, 코드를 살펴 보겠습니다 매우 간단합니다

Google지도 세트 패딩 사용 메서드를 사용하여지도 가장자리에 패딩을 추가합니다 이 메서드는 패딩을 결정하기 위해 네 개의 매개 변수를 사용합니다 왼쪽, 위쪽, 오른쪽 및 아래쪽 가장자리에 매개 변수 이름은 기억하기 쉽습니다 왼쪽, 위쪽, 오른쪽, 및 바닥 지도 재 센터링 (re-centering)과 같은 카메라 업데이트, 자동으로 패딩 처리됩니다

따라서 오프셋을 직접 계산할 필요가 없습니다 그리고 언제든지지도 패딩을 동적으로 변경할 수 있습니다 세부 사항은 문서에 있습니다 또한 Google지도 API 데모 앱을 살펴보십시오 Google Play 서비스와 함께 제공됩니다

다음은 데모에 대한 설명서 링크입니다 앱 그것은 내가 여러분에게 보여준 것보다 더 복잡한 예입니다 예를 들어, 애니메이션을 추가 할 수 있습니다 사이드 바를 안팎으로 밀어 넣을 수 있습니다

패딩 데모는 데모 앱에서 보이는 영역이라고합니다 메뉴 감사합니다 Google에서이 동영상을 즐기 셨기를 바랍니다 개발자 라이브